【发布时间】:2020-11-09 02:43:30
【问题描述】:
我需要在项目中托管的 web 视图中动态更改大约 10 个 HTML 字母。这似乎应该很简单。我实际上只需要在我的项目中的 .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)
}
【问题讨论】:
-
不能用js来修改你的html文件吗?
标签: javascript html ios swift wkwebview