我有一个UIWebView,当用户点击链接时我需要做一些事情.有一个委托回调,可用于检测水龙头:
- (BOOL) webView: (UIWebView*) webView
shouldStartLoadWithRequest: (NSURLRequest*) request
navigationType: (UIWebViewNavigationType) navigationType
{
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
…
}
}
Run Code Online (Sandbox Code Playgroud)
问题是此代码不处理所有链接点击.例如,一个普通的Google搜索结果页面对链接做了一些奇怪的事情:
<a href="http://example.com/" class="l" onmousedown="return rwt(…)">
<em>Link Text</em>
</a>
Run Code Online (Sandbox Code Playgroud)
该rwt功能导致链接UIWebViewNavigationTypeLinkClicked在点击时不触发事件.有没有办法可靠地检测落入"导航到其他页面"存储桶的所有事件?
到目前为止,我已经达到了以下解决方案.首先,我在加载时将一些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);
}
Run Code Online (Sandbox Code Playgroud)
当用户点击链接时,由于webView:shouldStartLoadWithRequest: navigationType:委托调用,我提前知道了:
if ([[[request URL] scheme] isEqualToString:@"callback"]) {
[self setNavigationLeavingCurrentPage:YES];
return NO;
}
Run Code Online (Sandbox Code Playgroud)
然后,如果另一个请求出现并且_navigationLeavingCurrentPage为真,我知道用户已经点击了链接,即使导航类型标志是UIWebViewNavigationTypeOther.我仍然需要广泛地测试解决方案,因为我担心它会导致一些误报.
| 归档时间: |
|
| 查看次数: |
14016 次 |
| 最近记录: |