如何在Dart google chrome应用程序中向webview发送邮件(securityError)

如何在Dart google chrome应用程序中向webview发送邮件(securityError),webview,dart,google-chrome-app,google-chrome-webview,Webview,Dart,Google Chrome App,Google Chrome Webview,我正在使用Dart编程语言构建一个带有webview的Google Chrome应用程序。 应用程序正在通过postMessage与webview内容通信。如果我从DartEditor运行应用程序(作为Chrome应用程序运行),postMessage工作正常。但在构建(dart2js)并使用“加载未打包的扩展…”加载到浏览器后,应用程序无法获取webview contentWindow并在其上执行postMessage chrome开发控制台出错: 未捕获的安全性错误:阻止了带有原点“chro

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

chrome开发控制台出错: 未捕获的安全性错误:阻止了带有原点“chrome”的帧-extension://bpddihniogcgmnlaghkacfagkecgnljo从访问原点为“swappedout://”的帧。请求访问的帧具有“chrome扩展”协议,被访问的帧具有“交换输出”协议。协议必须匹配

谷歌浏览器版本36.0.1951.5开发 Dart版本SDK 1.4.2,版本1.5.0-dev.4.2-给出了相同的错误


这是演示问题的最小工作示例-

众所周知,这是当前版本的dart2js编译器的一个bug,请参阅

我建立了一个简单的解决方案 如果contextWindow.postMessage是从JS包装器调用的,那么它可以正常工作。 用法示例:

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

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

最近也出现了一些类似的错误。我认为你应该在dartbug.com/newAdded上提交一份bug报告,我认为你应该用这个问题的链接来回答你自己的问题,现在它已经被分类了。在问题解决之前,不要将其标记为已接受。这有点不妥,但您可以运行脚本(
webview.executeScript()
)将消息发送到webview,并使用提示将消息从webview发送到能够检索返回值的应用程序(
webview.addEventListener(
webview.addEventListener('dialog')
)。