我已经发布了一个 Flutter iOS 应用程序,我需要在其中注入 JavaScript 来解决 Flutter 中的一个错误(我现在没有指向该错误的链接)。事实上,当您使用
window.pushstate()
API 时,当 url 发生变化时,您不会获得更新。
我构建了一个小 hack 来获取有关更改的信息,但这似乎会导致异常。因为我只有这个疯狂的短堆栈跟踪,所以我不确定如何修复它。
PlatformException: PlatformException(FWFEvaluateJavaScriptError, Failed evaluating JavaScript., Instance of 'NSError', null)
File "web_kit_api_impls.dart", line 1013, in WKWebViewHostApiImpl.evaluateJavaScriptForInstances
File "<asynchronous suspension>"
File "webkit_webview_controller.dart", line 278, in WebKitWebViewController.runJavaScript
我认为这里的相关代码是我构建 webviewcontroller 的地方:
final pushStateSpyJavaScript = '''((history)=>{
const org=history.pushState;
history.pushState=(state,_,url)=>{
org.apply(history, [state,_,url]);
if(url) {
window.flutter.postMessage(url.toString());
}
};
addEventListener('popstate', (event) => window.flutter.postMessage(location.href.toString()));
})(window.history)''';
webViewController.addJavaScriptChannel('flutter', onMessageReceived: (message) {
onUrlChanged(message.message);
});
webViewController.setNavigationDelegate(NavigationDelegate(
onPageFinished: (url) {
onUrlChanged(url);
webViewController.runJavaScript(pushStateSpyJavaScript);
},
));
你有没有看到一些不经意的错误?我在上面得到了很多例外。
因为我不是本地 iOS 开发人员,所以我不确定如何调试它。
我刚遇到同样的错误。你找到任何解决方案了吗?