加载XWalkView中的所有链接或在Intent中打开一个

时间:2015-04-16 17:22:14

标签: android crosswalk-runtime

我正在使用XWalkView加载页面。

我想知道是否可以拦截页面中链接的加载请求,并将其加载到新的意图弹出窗口或停止加载链接。

    public WebResourceResponse shouldInterceptLoadRequest(XWalkView view,
                                                          String url) {
        Log.d("shouldInterceptLoadRequ","shouldInterceptLoadRequest " + url);
        return super.shouldInterceptLoadRequest(view, url);
    }

当页面有链接时不会调用此方法。 当一个页面有链接时,我得到一个Android默认弹出窗口,要求浏览器打开链接。

如果网址是Google地图位置,我需要打开Goog​​le地图应用。

我确实尝试使用默认的android WebView,但html5支持很弱

被修改

我应该使用

public boolean shouldOverrideUrlLoading(XWalkView view, String url)

但它看起来有外部链接的错误:

https://crosswalk-project.org/jira/browse/XWALK-3606

已编辑2

当链接具有target =" _blank"

时,会出现问题

3 个答案:

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

shouldOverrideUrlLoadingshouldInterceptLoadRequest现在都在使用。

答案 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;
    }
});