GeckoView中是否应该有一个shouldOverrideUrlLoading?

时间:2019-04-30 14:21:02

标签: java android firefox gecko

我对在Android WebView中使用shouldOverrideUrlLoading方法非常熟悉,并在一些项目中使用了它。 我有一个新项目,需要Mozilla的GeckoView而不是标准WebView,但是我似乎找不到一种方法来覆盖url(以防止用户跟踪最初加载的网站上的某些链接)。是否存在类似的方法?

我已按照以下说明将GeckoView嵌入到我的项目中:https://wiki.mozilla.org/Mobile/GeckoView,这些网站呈现出了很棒的效果。

我要模拟的Android WebView代码如下:

browser.setWebViewClient(new WebViewClient() {
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
    Uri uri = Uri.parse(url);
    if (url.startsWith("https://www.example.com/")) {
      return false;
    }
    return true;
  }
});

GeckoView中有类似的方法吗?

1 个答案:

答案 0 :(得分:1)

我认为您要寻找的是navigationDelegate#OnLoadRequest

private fun createNavigationDelegate() = object : GeckoSession.NavigationDelegate {
    override fun onLoadRequest(session: GeckoSession, request: GeckoSession.NavigationDelegate.LoadRequest): GeckoResult<AllowOrDeny> {
        return if (request.uri.startsWith("https://www.example.com/")) {
            GeckoResult.fromValue(AllowOrDeny.DENY)
        } else {
            GeckoResult.fromValue(AllowOrDeny.ALLOW)
        }
    }
}

private fun setupGeckoView() {
    geckoView = findViewById(R.id.geckoview)
    val runtime = GeckoRuntime.create(this)
    geckoSession.open(runtime)
    geckoView.setSession(geckoSession)
    geckoSession.loadUri(INITIAL_URL)
    geckoSession.navigationDelegate = createNavigationDelegate()
}

如果还有其他问题,也可以在其GitHub repository上发表。您可能感兴趣的另一个项目是Mozilla Android Components