让我们说我的Android活动中的Crosswalk视图显示如下页面:
<html>
<body>
<a target="_blank" href='http://some-website.com/document.pdf'>Download a PDF</a>
</body>
</html>
如何拦截该链接的网址?
请注意,因为它正在新的&#34;窗口中打开链接,所以不调用XWalkResourceClient.shouldOverrideUrlLoading
或shouldInterceptLoadRequest
等回调,可能是因为Crosswalk正在加载一个全新的文档
窗口创建有一个回调XWalkUIClient.onCreateWindowRequested
,但是它不包含任何包含在新窗口中加载的URL的参数。
我也知道,当创建一个新窗口时,用户代码可以实例化一个新的XWalkView用于加载目标文档,我应该设置自定义资源客户端和UI客户端。
到目前为止我尝试了什么:
XWalkResourceClient
和XWalkUIClient
中包含URL参数的所有方法。要么没有调用它们,要么参数为null或为空; XWalkUIClient.onCreateWindowRequested
中,返回覆盖load()
的XWalkView的子类,以便它可以拦截网址。该方法未被调用。非常感谢任何建议。谢谢!
答案 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,