繁体   English   中英

删除WebView中所有超级链接的目标_blank

[英]Remove target _blank for all hyper links in WebView

错误,这与android无关,该问题将被标记为android相关问题的重复项。 ???

我需要从所有超级链接中删除target=_blank ,以便所有链接都将在同一Web视图中打开。 当我搜索类似的Q&A时,他们中的大多数建议注入一个javascript,它将所有target=_blanks转换为_self 我首先在浏览器窗口中对此进行了测试,该脚本确实转换了所有超链接,但没有任何效果,它仍然继续在新窗口中打开。 如何强制在同一窗口/ WebView中打开它?

var a = document.getElementsByTagName("a");
for (i=0; i<a.length; i++)
    if (a[i].target == "_blank")
        a[i].target = "_self";

实际上,您的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];
}

请注意,应针对每个帧分别执行此脚本。

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM