在我们的应用程序中,我们使用webview在视图中加载外部链接 . 使用loadurl方法加载链接并设置webview客户端以显示预加载器和webchrome客户端以监听webview的任何链接更改 .
在webview中加载的URL . 当链接加载时,有几个iframe,在其中我们有一个文本链接 . 点击链接,页面需要在默认浏览器中打开,而不是在webview本身内打开 .
使用min-sdk / API级别8来构建项目 . 以下是供参考的代码段 . 将附加的webview客户端和webchromeclient创建到webview,然后为其分配URL .
private class SomWebViewClient extends WebChromeClient{
public void onProgressChanged (WebView view, int newProgress){
if(newProgress == 100){
}
}
}
private class SomWebViewDefClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
@Override
public void onLoadResource (WebView view, String url){
if(url.equalsIgnoreCase("http://google.com")){
view.stopLoading();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
view.canGoBack();
}
}
}
我尝试将WebViewClient添加到webview,并在shouldOverrideUrlLoading方法中识别URL更改 . 但这里没有捕获任何事件 . 有没有办法处理webview网址的iframe内的点击 .
当我尝试在webview中打开不同的链接(没有任何iframe)时,能够跟踪在shouldOverrideUrlLoading内部触发的点击 . 但是当URL包含iframe并且当用户在webview内的任何链接上cliks时,无法跟踪shouldOverrideUrlLoading并在同一webview本身而不是新的浏览器窗口中打开 .
当我搜索问题时,我无法找到确切的问题 . 如果有人遇到类似问题并找到解决方案,请分享 .
如果还有其他需要,请告诉我 .
在此先感谢,关心Srinivasan.C
2 回答
也许你打破了Same Origin Policy . 看看this similar post .
Edit :有一种方法可以克服此安全策略,但您需要接受您面临的风险 . 在响应中,请确保您具有以下标头:"Access-Control-Allow-Origin:"
如果您可以将属性target =“_ top”添加到链接,则会触发shouldOverrideUrlLoading() . 以下JavaScript代码执行此操作: