在网络视图中将 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/
我需要在项目托管的网络视图中动态更改 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/