在webview中如何处理回调函数

4
我现在正在进行一个安卓项目,关于如何在不同的Webview中执行回调,我有一个问题。我也在我的项目中使用了JSInterface。这里我有两个Webview。其中一个有一个索引页,另一个是一个覆盖层(尽管仍然是一个HTML页面)。我想做的是,如果任何用户点击覆盖层上的某些链接,它应该触发一个回调函数,该函数写在与JSInterface连接的索引页面所在的Java文件中。这可能听起来很困惑,但我画了一些东西来帮助澄清!谢谢!enter image description here

希望我没有误解你的问题。这个链接可能会对你有所帮助:https://dev59.com/n1DTa4cB1Zd3GeqPKqLc - Ovidiu Latcu
如果第二个Webview是第一个Webview的叠加层,从架构角度来看,通过在HTML中执行叠加并仅使用一个Webview可能更简单,并且从资源利用角度来看更好。 - Theo
1个回答

8

您可以使用类似myurl://function的自定义URL方案来创建功能链接。然后编写WebView的shouldOverrideUrlLoading事件的事件处理程序,决定如何处理URL:要么指示WebView加载它,要么执行某些自定义操作。

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)  
{  
    if (url.startsWith("myurl://"))  
    {  
        // Parse further to extract function and do custom action  
    }
    else  
    {  
        // Load the page via the webview
        view.loadUrl(url);  
    }  
    return true;  
}  

我在这个简单粗暴的示例中使用了startsWith来检查URL,但是你应该考虑使用android.net.Uri.parse来解析URL。
这将使您能够调用Java函数foo(),而不必经过第一个WebView。
如果您想要经过第一个webView,则可以像这样调用JSInterface上的函数(其中webView1是通过findViewById检索到的第一个WebView):
webView1.loadUrl("javascript:myjsinterface.myjsfunc();")

感谢您的及时回复。我仍然困惑的是,对于第二个Webview,我没有使用JSInterface,有没有办法将其传递回Webview1,并利用已经实现的JSInterface? - sammiwei
它确实有帮助,findViewById 就是我在寻找的。非常感谢您详细的解释! - sammiwei

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