检测何时在UIWebView上单击包含本地锚标记的URL?

时间:2014-11-18 12:07:15

标签: ios objective-c uiwebview

我想检测何时在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

感谢。

1 个答案:

答案 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.
    }
}

希望这有帮助!