gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:26:12 24 4
gpt4 key购买 nike

呃,这与 android 无关,这个问题将被标记为与 android 相关的问题的重复。 ???

我需要从所有超链接中删除 target=_blank 以便所有链接都将在同一个 webview 中打开。当我搜索类似的问答时,他们中的大多数人建议注入(inject)一个 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>

您需要将此脚本注入(inject)您的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];
}

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

希望对您有所帮助。

关于javascript - 删除 WebView 中所有超链接的目标_blank,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20904169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com