GeckoView 中有 shouldOverrideUrlLoading 方法吗?

4
我非常熟悉在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中是否有类似的方法?

如果有setWebViewClient方法,请创建一个继承WebViewClient的类,并重写shouldOverrideUrlLoading方法。 - Cagri Yalcin
抱歉如果我表达不清楚,@CagriYalcin!代码示例是我从一个使用标准Android WebView的旧项目中提取的。我正在寻找GeckView的解决方案。 - elisam98
看看这个 - Cagri Yalcin
1个回答

10

我认为您要找的内容在 导航代理程序#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 存储库 上提交问题。另一个可能会让您感兴趣的项目是Mozilla Android Components


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接