在我们的应用中,我们使用webview在视图中加载外部链接。使用loadurl方法加载链接并设置webview客户端以显示预加载器和webchrome客户端以监听webview的任何链接更改。
在webview中加载的网址。当链接加载时,有几个iframe,在其中我们有一个文本链接。点击链接,页面需要在默认浏览器中打开,而不是在webview本身内打开。
使用min-sdk / API level 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
答案 0 :(得分:1)
也许你打破了Same Origin Policy。看看this similar post。
修改:有一种方法可以克服此安全策略,但您需要接受所面临的风险。在响应中,请确保您具有以下标题:“Access-Control-Allow-Origin:”
答案 1 :(得分:0)
如果您可以将属性target =“_ top”添加到您的链接,则会触发shouldOverrideUrlLoading()。 以下JavaScript代码执行此操作:
public class MyFrame : Frame
{
public MyFrame()
{
Content = new Label() {
Text = "Test"
};
BackgroundColor = Color.Transparent;
OutlineColor = Color.Transparent;
}
}
[assembly: ExportRenderer (typeof (MyFrame), typeof (MyFrameRenderer))]
namespace YourAssembly.Droid
{
public class MyFrameRenderer : FrameRenderer
{
public MyFrameRenderer()
{
}
}
}