Google已要求我在我的Android应用中解决https://support.google.com/faqs/answer/9095419,这基本上意味着不要对通过HTTP加载的网页使用JavaScript注入机制。
不使用此机制(选项1)对我不起作用。将android:usesCleartextTraffic设置为false也不起作用,因为该应用在其他地方使用了非HTTPS流量。这样就给我留下了“您可以确保任何受影响的WebView都不会通过loadUrl通过HTTP方案加载任何URL”的消息,我很高兴,因为我的应用仅使用file:/// URL将内容加载到WebView中,这应该是安全的明智选择。但是,我需要如何编码shouldOverrideUrlLoading方法,以便Google的检查器可以识别出我仅使用file:/// URL?
请注意,这个问题与Remediation for JavaScript Interface Injection Vulnerability(因为我很清楚所要询问的内容)和In Android, JavaScript Interface Injection Vulnerability(因为我没有使用HTTP,而是使用file:/// URL)不同
编辑:添加我的shouldOverrideUrlLoading方法。 (这不是全部方法,而是其中的重要部分。)
@Override
public boolean shouldOverrideUrlLoading (WebView browser, String url) {
if (url.startsWith("file:///")) {
// This is my web site, so do not override; let my WebView load the page
browser.loadUrl(url);
return true;
}
// Otherwise, the link is not for a page on my site, or is an entirely different kind of URI
// (like tel:, geo: or mailto:), so launch another Activity that handles URLs
act.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return true;
}
答案 0 :(得分:0)
我还没有找到一种可满足Google代码检查器要求的将file://网址与资产一起使用的方法。尽管这可以解决问题,但我仍然不清楚人们可能需要如何编码。
我最终要做的-解决了我的紧迫问题-是通过WebView.evaluateJavascript方法调用JavaScript方法。从WebViewClient.onPageFinished中调用时,页面已完成加载,因此可以访问所有元素。尽管对于我的情况而言并不重要,但是此方法也可以将值返回给Java代码。因此,尽管它不是JavascriptInterface的一般替代品,但却可以解决其一些用例。