Android WebView JavaScript-桥在一段时间后变得不可用
Android WebView JavaScript-Bridge becomes unusable after some time
我们开发了一个混合 android 应用程序。对于 Webview 和本机 App-Code 之间的通信,我们通过以下方式设置了一个 Javascript-Bridge:
webView.addJavascriptInterface(
WebViewJavaScriptApi(),
"androidJsBridge"
)
这工作得很好,我们可以在 WebViewJavaScriptApi 中调用本机应用程序代码。但是一段时间后,有些功能似乎变得无法调用。
我通过 chrome 远程调试工具对此进行了测试:加载 webview 并在控制台中调用 androidJsBridge['myFunction'] 后,我将获得“本机代码”作为 return 值。几秒钟或几分钟后执行此操作,我将得到“未定义”。
这对我的任何方法都是随机发生的。没有任何可见的优先级或逻辑。
经过几个小时的调试,我们发现了这一点:
垃圾回收可能确实是问题所在。此外,该问题似乎仅在几周或几个月后才存在。所以可能 chrome webview 更新做错了什么?
有没有人有类似的问题?是否可以防止 JS 对象被垃圾回收?
这些方法在我的 JS 代码中以明文形式不可见。他们被称为:
androidJsBridge[functionName](promiseId, params);
其中 functionName 是包含最终方法的字符串变量。
Google同时解决了这个问题。参见:https://issuetracker.google.com/issues/185145178?pli=1
我们开发了一个混合 android 应用程序。对于 Webview 和本机 App-Code 之间的通信,我们通过以下方式设置了一个 Javascript-Bridge:
webView.addJavascriptInterface(
WebViewJavaScriptApi(),
"androidJsBridge"
)
这工作得很好,我们可以在 WebViewJavaScriptApi 中调用本机应用程序代码。但是一段时间后,有些功能似乎变得无法调用。
我通过 chrome 远程调试工具对此进行了测试:加载 webview 并在控制台中调用 androidJsBridge['myFunction'] 后,我将获得“本机代码”作为 return 值。几秒钟或几分钟后执行此操作,我将得到“未定义”。
这对我的任何方法都是随机发生的。没有任何可见的优先级或逻辑。
经过几个小时的调试,我们发现了这一点:
垃圾回收可能确实是问题所在。此外,该问题似乎仅在几周或几个月后才存在。所以可能 chrome webview 更新做错了什么?
有没有人有类似的问题?是否可以防止 JS 对象被垃圾回收?
这些方法在我的 JS 代码中以明文形式不可见。他们被称为:
androidJsBridge[functionName](promiseId, params);
其中 functionName 是包含最终方法的字符串变量。
Google同时解决了这个问题。参见:https://issuetracker.google.com/issues/185145178?pli=1