错误这与android无关,这个问题即将被标记为与android相关的问题的副本。 ???
我需要从所有超链接中删除target=_blank
,以便在同一网页视图中打开所有链接。
当我搜索类似的Q&因为他们中的大多数建议注入一个将所有target=_blanks
转换为_self
的javascript。我首先在浏览器窗口中测试它,并且脚本确实转换了所有超链接但它没有任何效果,它仍然在新窗口中继续打开。如何强制它在同一个窗口/ webview中打开?
var a = document.getElementsByTagName("a");
for (i=0; i<a.length; i++)
if (a[i].target == "_blank")
a[i].target = "_self";
答案 0 :(得分:0)
实际上,您的JavaScript是正确的。我怀疑你已经创建了测试html页面来检查它。在这种情况下,您需要在页面末尾放置脚本,否则它不会影响链接:
<body>
<!-- This will work -->
<a target="_blank" href="https://google.com">google.com</a>
<script>
var a = document.getElementsByTagName("a");
for (i=0; i<a.length; i++)
if (a[i].target == "_blank")
a[i].target = "_self";
</script>
<!-- This link will not be modified -->
<a target="_blank" href="https://google.com">google.com</a>
</body>
您需要在WebView
中注入此脚本。在WebFrameLoadDelegate
中使用以下代码:
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame {
NSString *script = @"var a = document.getElementsByTagName(\"a\");\n" \
"for (i=0; i<a.length; i++) {\n" \
" if (a[i].target == \"_blank\") {\n" \
" a[i].target = \"_self\";\n" \
" }\n" \
"};";
[frame.javaScriptContext evaluateScript:script];
}
请注意,应分别对每个帧执行此脚本。
希望它有所帮助。