gpt4 book ai didi

ios - 如何可靠地检测 UIWebView 中的链接点击?

转载 作者:技术小花猫 更新时间:2023-10-29 11:22:03 26 4
gpt4 key购买 nike

我有一个 UIWebView,当用户点击链接时我需要做一些事情。有一个委托(delegate)回调可用于检测点击:

- (BOOL) webView: (UIWebView*) webView
shouldStartLoadWithRequest: (NSURLRequest*) request
navigationType: (UIWebViewNavigationType) navigationType
{
if (navigationType == UIWebViewNavigationTypeLinkClicked) {

}
}

问题在于此代码无法处理所有链接点击。例如,一个普通的 Google 搜索结果页面对链接做了一些奇怪的事情:

<a href="http://example.com/" class="l" onmousedown="return rwt(…)">
<em>Link Text</em>
</a>

rwt 函数导致链接在点击时不触发 UIWebViewNavigationTypeLinkClicked 事件。有没有一种方法可以可靠地检测属于“导航到其他页面”的所有事件?

最佳答案

到目前为止,我已经得出以下解决方案。首先,我在页面加载时注入(inject)一些 JS 代码:

function reportBackToObjectiveC(string)
{
var iframe = document.createElement("iframe");
iframe.setAttribute("src", "callback://" + string);
document.documentElement.appendChild(iframe);
iframe.parentNode.removeChild(iframe);
iframe = null;
}

var links = document.getElementsByTagName("a");
for (var i=0; i<links.length; i++) {
links[i].addEventListener("click", function() {
reportBackToObjectiveC("link-clicked");
}, true);
}

当用户点击链接时,由于 webView:shouldStartLoadWithRequest: navigationType: 委托(delegate)调用,我提前知道:

if ([[[request URL] scheme] isEqualToString:@"callback"]) {
[self setNavigationLeavingCurrentPage:YES];
return NO;
}

然后如果另一个请求到来并且 _navigationLeavingCurrentPage 为真,我知道用户点击了一个链接,即使导航类型标志是 UIWebViewNavigationTypeOther。我仍然需要对解决方案进行广泛的测试,因为我担心它会导致一些误报。

关于ios - 如何可靠地检测 UIWebView 中的链接点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14358774/

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