GeckoView 中有 shouldOverrideUrlLoading 吗?

Posted

技术标签:

【中文标题】GeckoView 中有 shouldOverrideUrlLoading 吗?【英文标题】:Is there a shouldOverrideUrlLoading in GeckoView? 【发布时间】:2019-09-19 05:40:01 【问题描述】:

我对在 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 对不起,如果我不清楚,@CagriYalcin!代码示例是我从一个使用标准 Android WebView 的旧项目中提取的。我正在寻找 GeckView 的做事方式。 所以请检查this。 【参考方案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。

【讨论】:

以上是关于GeckoView 中有 shouldOverrideUrlLoading 吗?的主要内容,如果未能解决你的问题,请参考以下文章

GeckoView 发送事件或启动函数 (Android)

我如何在 GeckoView 上使用 canGoBack()

在 Android 中集成 GeckoView

Geckoview 获得麦克风权限

关于 Mozilla GeckoView 的 Android 问题

下拉菜单(选择标签、组合框)在 GeckoView 实现中不起作用