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

时间:2014-01-03 12:55:42

标签: javascript cocoa webview

错误这与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";

1 个答案:

答案 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];
}

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

希望它有所帮助。