在网络视图中将 HTML 更改为 Swift

Change HTML in webview with Swift

我需要在项目托管的网络视图中动态更改 HTML 的大约 10 个字母。这看起来应该很简单。我实际上只需要更改项目中的 .html 文件中的大约 10 个字符。

似乎让这件事变得如此困难的是我需要在页面开始加载到 wkwebview 之前完成它。有问题的字符位于小部件使用的 <script> 标签内。显然,小部件对脚本中的任何字符在开始加载后发生更改都不满意。这是我在加载 wkwebview 后尝试使用 JavaScript 更改字符后的结论。

如何更改 webview 开始加载前的 10 个字符?

我在想,也许我可以在将 html 文件公开到 Internet 之前更改它...但我不知道该怎么做。或者也许我可以在更改 HTML 后重新加载包含小部件的 div。但我认为它会被设置回默认值。

这是一个基本的 page.html 文件:

<html>
<body>
<head>
<script>
setName(param) {
  var myelement = document.getElementById("name");
        myelement.innerHTML= param;
}
</script>
</head>
<body>
<div class="widget-container">
  <div id="widget-dest"></div>
  <script type="text/javascript" src="https://s3._/widget.js"></script>
  <script type="text/javascript">
  new widget(
  {
 
  "symbol": "omar sharif",//THIS IS THE PARAMETER I NEED TO CHANGE..<span id=name></span> would go here but JS NOT WORKING
  "timezone": "Etc/UTC",
  "locale": "en"
}
  );
  </script>
</div>
</body>
</html>

我正在用

打开这个 html 文件
var webView = WKWebView()
override func viewDidLoad() {
super.viewDidLoad()
webView.navigationDelegate = self
webView.uiDelegate = self
if let url = Bundle.main.url(forResource: "page", withExtension: "html") {
webView.loadFileURL(url, allowingReadAccessTo: url.deletingLastPathComponent())
}
}
override func loadView() {
 super.loadView()
 self.view = webView
}
//Unsuccessful effort to set name value with JS in delegate after loading. It can set a value elsewhere on page, but widget won't load when I try to set parameter this way


func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    webView.evaluateJavaScript("setName("John Wayne")", completionHandler: nil)
    }

不知道对你有没有帮助。但你可以在这里查看: https://www.appcoda.com/webkit-framework-tutorial/