Crosswalk:如何获取在新标签/窗口中打开的非Web资源的URL

时间:2016-04-11 14:05:41

标签: android crosswalk-runtime

让我们说我的Android活动中的Crosswalk视图显示如下页面:

<html>
<body>
<a target="_blank" href='http://some-website.com/document.pdf'>Download a PDF</a>
</body>
</html>

如何拦截该链接的网址?

请注意,因为它正在新的&#34;窗口中打开链接,所以不调用XWalkResourceClient.shouldOverrideUrlLoadingshouldInterceptLoadRequest等回调,可能是因为Crosswalk正在加载一个全新的文档

窗口创建有一个回调XWalkUIClient.onCreateWindowRequested,但是它不包含任何包含在新窗口中加载的URL的参数。

我也知道,当创建一个新窗口时,用户代码可以实例化一个新的XWalkView用于加载目标文档,我应该设置自定义资源客户端和UI客户端。

到目前为止我尝试了什么:

  • 原始视图和目标视图中XWalkResourceClientXWalkUIClient中包含URL参数的所有方法。要么没有调用它们,要么参数为null或为空;
  • XWalkUIClient.onCreateWindowRequested中,返回覆盖load()的XWalkView的子类,以便它可以拦截网址。该方法未被调用。

非常感谢任何建议。谢谢!

1 个答案:

答案 0 :(得分:1)

我确信覆盖shouldOverrideUrlLoading将拦截你的html中的url。 我没有做任何特别的事情,并添加如下代码:

  mXWalkView.setResourceClient(new XWalkResourceClient(mXWalkView) {
        @Override
        public boolean shouldOverrideUrlLoading(XWalkView view, String url) {
            Log.i(LOGTAG, "shouldOverrideUrlLoading  ");
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
            return true;
        }
  });

然后加载你提供的html:

mXWalkView.load("file:///android_asset/download.html", null);

当我点击XWalkView中的链接时,将调用shouldOverrideUrlLoading并调用如下的UI,

enter image description here