我想检测何时在html
页面上点击具有本地锚标记的网址,该网页当前已在UIWebView
上呈现。我做了很多搜索并实施了各种解决方法但没有成功。来自周围的最终建议总是来到这个delegate
方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
我得出的最大问题是,如果已经在渲染的HTML
页面中,这种方法根本不会调用本地锚标记。我的意思是如果单击包含新的新页面URL (anchor tag)
,则该方法被触发。这是一个例子。如果我的UIWebView
已经呈现www.xyz.com
,现在如果我按下某个类似于www.xyz.com#amazing
的网址(链接出现在同一页面上),则代理方法不会被解雇。
我正在开发一个简单的in-app
浏览器。我必须在我的应用内浏览器的地址栏中显示每个页面的URL
rendered/visible
。现在唯一的障碍是我无法显示每个只会带来新内容但tags/javascript
域相同的URL
个链接。
有关于此
的使用的解决方案`[webView stringByEvaluatingJavaScriptFromString:@"window.location.hash"]`
问题在于,除非我无法获得delegate
方法called/fired
,否则此代码没有任何好处。
是否有任何解决方法或我是否应该放弃这个?我希望我能解释这个问题。
注意:最佳TestCase场景是UIWebView上的移动版pinterest.com
感谢。
答案 0 :(得分:0)
我并不完全遵循你想要做的事情,或许你可以澄清一点。
与此同时,以下是如何让UIWebView处理已加载的网页中的每个链接点击。它正在寻找一个以“bloodwing”开头的URL Scheme。如果找到它,它将停止请求。否则,它将按预期工作。
因此http://www.yahoo.com
将起作用,bloodwing://www.yahoo.com
将失败。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *url = request.URL;
if ([url.scheme isEqualToString: @"bloodwing"]) {
[webView stringByEvaluatingJavaScriptFromString: @"doSomething();"];
return NO;
} else {
return YES; // Return YES to make sure regular navigation works as expected.
}
}
希望这有帮助!