javascript - 如何在 Chrome App 中与 WebView 通信?

标签 javascript google-chrome-extension google-chrome-app cordova-chrome-app

我开发了一个网站,我打算在 Chrome 应用程序中的 web View 中显示该网站。这工作正常。

现在,我想使用来自网站的 postMessage,将消息从 webview 发送到包含的 Chrome 应用程序中。这是通过 top.postMessage 完成的在 WebView 内。

我尝试了以下事件监听器:

webView.contentWindow.addEventListener('message', messageHandler);

webView.addEventListener('message', messageHandler);

window.addEventListener('message', messageHandler);

document.addEventListener('message', messageHandler);

我已成功实现以下事件监听器。所有这些都按预期工作:contentload , dialogconsolemessage .

除非我能让它工作,否则我正在考虑使用 consolemessage将消息从 webview 发送到容器 - 我觉得这没什么吸引力,我怀疑在不使用开发人员模式时它不会工作。

最佳答案

webview sample有一个很好的演示使用 postMessage 在应用程序和加载在 web View 中的外部页面之间发送消息。

下面是关键的代码片段。

  • 在应用程序中,聆听 loadstop webview 的事件并向页面发送初始消息。您可以将此消息限制为特定域或页面。

    wv1.addEventListener('loadstop', sendInitialMessage);
    
    function sendInitialMessage(e) {
     // only send the message if the page was loaded from googledrive hosting
     e.target.contentWindow.postMessage("initial message", "https://googledrive.com/host/*");
    }
    
  • 在外部页面,收听 message事件并保存源和起源。

    window.addEventListener('message', onMessage);
    
    var appWindow, appOrigin;
    
    function onMessage(e) {
     appWindow = e.source;
     appOrigin = e.origin;
    }
    

    然后页面可以使用这些对象将消息发回应用程序。

    function doSendMessage() {
     if (appWindow && appOrigin) {
      appWindow.postMessage("this is a message from the page!", appOrigin);
     } 
    }
    
  • 该应用程序还应收听 message从外部页面接收消息的事件。

    window.addEventListener('message', function(e) {
     log("[???] messagereceived: " + e.data);
    });
    
  • 关于javascript - 如何在 Chrome App 中与 WebView 通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30367455/

    相关文章:

    html - Font Awesome 图标不适用于 Chrome 应用程序

    google-chrome-extension - 无法将应用上传到 Chrome 网上应用店 - "This item is not an app, please remove app section from manifest."

    javascript - 带有 wss ://的 WebSocket 操作码 7

    javascript - Angular 2 : How to filter records between two dates?

    javascript - 我可以强制浏览器在 javascript 执行期间呈现 DOM 更改吗

    javascript - 如果弹出窗口关闭,如何在background.js和popup.js之间发送数据?

    javascript - Chrome 扩展 : How do you gray out icon depending on the url?

    html - 如何让 Chrome 扩展程序抓取并保存图像,永久缓存它?

    google-chrome-app - Chromebase Kiosk 应用程序 - 无效的应用程序

    javascript - Google Apps 脚本为 getLastRow 抛出电子邮件失败通知,我做错了什么?