我正在使用XWalkView加载页面。
我想知道是否可以拦截页面中链接的加载请求,并将其加载到新的意图弹出窗口或停止加载链接。
public WebResourceResponse shouldInterceptLoadRequest(XWalkView view,
String url) {
Log.d("shouldInterceptLoadRequ","shouldInterceptLoadRequest " + url);
return super.shouldInterceptLoadRequest(view, url);
}
当页面有链接时不会调用此方法。 当一个页面有链接时,我得到一个Android默认弹出窗口,要求浏览器打开链接。
如果网址是Google地图位置,我需要打开Google地图应用。
我确实尝试使用默认的android WebView,但html5支持很弱
被修改
我应该使用
public boolean shouldOverrideUrlLoading(XWalkView view, String url)
但它看起来有外部链接的错误:
https://crosswalk-project.org/jira/browse/XWALK-3606
已编辑2
当链接具有target =" _blank"
时,会出现问题答案 0 :(得分:0)
公共类MyActivity扩展了Activity {
私有XWalkView xWalkWebView;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.my_activity_xml);
xWalkWebView =(XWalkView)findViewById(R.id.xwalkView);
xWalkWebView.addJavascriptInterface(new WebAppInterface(),“Android”);
xWalkWebView.load(url_your_want_to_load,NULL); }
公共类WebAppInterface {
@org.xwalk.core.JavascriptInterface
public void callFunction(){
// Do your Android Stuff here
}
}
=============================================== =============================>
现在在您的页面中调用函数: - Android.callFunction();
答案 1 :(得分:0)
修正了测试版:14.43.343.1
shouldOverrideUrlLoading
和shouldInterceptLoadRequest
现在都在使用。
答案 2 :(得分:0)
您可以从主WebView中捕获onCreateWindowRequested
,
让虚拟WebView处理请求:只需将URL阻止加载并在系统浏览器中打开。
XWalkPreferences.setValue(XWalkPreferences.SUPPORT_MULTIPLE_WINDOWS, true);
XWalkPreferences.setValue(XWalkPreferences.JAVASCRIPT_CAN_OPEN_WINDOW, true);
XWalkView popupView = new XWalkView(context);
popupView.setUIClient(new XWalkUIClient(popupView){
@Override
public void onPageLoadStarted(XWalkView view, String url) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
view.getContext().startActivity(browserIntent);
view.stopLoading();
}
});
mainWebView.setUIClient(new XWalkUIClient(this){
@Override
public boolean onCreateWindowRequested(XWalkView view, InitiateBy initiator, ValueCallback<XWalkView> callback) {
callback.onReceiveValue(popupView);
return true;
}
});