webview - 如何在 Dart google chrome 应用程序中将消息发布到 webview (securityError)

标签 webview dart google-chrome-app google-chrome-webview

我正在使用 Dart 编程语言构建带有 webview 的 Google Chrome 应用程序。 该应用程序通过 postMessage 与 webview 内容进行通信。如果我从 DartEditor 运行应用程序(作为 Chrome 应用程序运行)postMessage 工作正常。但是在构建(dart2js)并使用“加载未打包的扩展...”加载到浏览器之后 - 应用程序无法获取 webview contentWindow 并在其上执行 postMessage。

来自 Chrome 开发控制台的错误: 未捕获的安全错误:阻止来源为“chrome-extension://bpddihniogcgmnlaghkacfagkecgnljo”的框架访问来源为“swappedout://”的框架。请求访问的帧具有“chrome-extension”协议(protocol),被访问的帧具有“swappedout”协议(protocol)。协议(protocol)必须匹配。

Google Chrome 版本 36.0.1951.5 开发版 Dart 版本 SDK 1.4.2、版本 1.5.0-dev.4.2 - 给出相同的错误。

这是演示该问题的最小工作示例 - https://github.com/Dumbris/dart_chrome_app_webview_security_error

最佳答案

据了解,这是当前版本dart2js编译器的一个bug,参见bug report here

我构建了一个简单的解决方法 chromeapp_webview_wrapper.js 如果 contextWindow.postMessage 从 JS 包装器调用 - 它工作正常。 使用示例:

js.JsObject _webview = new js.JsObject.fromBrowserObject(querySelector('webview'));
js.JsObject _webview_wrapper = new js.JsObject(js.context['WebviewWrapper'], [_webview]);
_webview_wrapper.callMethod('postMessage', ['initial message', '*']);

尽管如此,我仍在等待 Dart 开发团队修复错误。因为,与 WebView 内容的通信是 Chrome 打包应用中的重要功能。

关于webview - 如何在 Dart google chrome 应用程序中将消息发布到 webview (securityError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24161380/

相关文章:

dart - 在 Dart 中调用嵌套字典

dart - 在 Flutter 中从 Controller 控制滚动条

javascript - Chrome Notification API(用于扩展!)如何在被阻止后重新启用?

android - 在Android中调用多个WebView时如何控制内存使用?

webview - QML + Meego + webview 无法点击任何网站上的任何内容

android - Android KitKat 中的新 WebView 问题

dart - Flutter - 我正在寻找一种制作脉冲动画的方法

javascript - arduino + 串口 + chrome + 发送 - 无法通过串口发送数据

javascript - 如何知道 Chrome 应用程序窗口何时完全打开

javascript - 带有 JavaScript 警报/提示的 Android WebViewClient