Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从Google Chrome Webview向调用方/父窗口获取数据_Javascript_Google Chrome_Webview_Google Chrome App - Fatal编程技术网

Javascript 从Google Chrome Webview向调用方/父窗口获取数据

Javascript 从Google Chrome Webview向调用方/父窗口获取数据,javascript,google-chrome,webview,google-chrome-app,Javascript,Google Chrome,Webview,Google Chrome App,我正在开发一个Chrome Kiosk应用程序(打包应用程序限制适用),它本质上是一个web浏览器,将部署到一些Chrome设备上。我希望支持屏幕截图,我正在使用HTML2Canvas来做到这一点,但我需要存储它们以便稍后上传 我通过使用webview.executeScript{file:}和回调调用HTML2Canvas。在回调中,我正在执行实际的html2canvas调用 webview.executeScript({ file: "kiosk/html2canvas.js" }, h

我正在开发一个Chrome Kiosk应用程序(打包应用程序限制适用),它本质上是一个web浏览器,将部署到一些Chrome设备上。我希望支持屏幕截图,我正在使用HTML2Canvas来做到这一点,但我需要存储它们以便稍后上传

我通过使用webview.executeScript{file:}和回调调用HTML2Canvas。在回调中,我正在执行实际的html2canvas调用

  webview.executeScript({ file: "kiosk/html2canvas.js" }, handleHTML2CanvasInjected);

  function handleHTML2CanvasInjected(event) {
     var webview = document.querySelector('webview');
     webview.executeScript({code: "html2canvas(document.body).then(function(canvas){ //whatever });"});
   }
我可以将canvas对象附加到主体上,并查看屏幕截图是否正常工作。但是,我需要将此返回给调用方

我尝试过使用localStorage,但是webviews存储和调用方的存储似乎是两码事


这实际上归结为一个事实,即我需要能够在Webview和创建Webview的窗口之间传递“东西”。

使用以下行加载Webview,以确保在执行脚本后加载所有内容:

webview.addEventListener("contentload", function () {
  webview.executeScript({file: "myscript.js"}, function(result) {});
}
例如,在脚本中可以调用html2canvas。您可以使用消息传递系统将结果传回主脚本:

var body = document.querySelector("body");

html2canvas(body, {
    onrendered: function(canvas) {
        chrome.runtime.sendMessage({canvas:canvas.toDataURL()});
    }
});
然后只需对主脚本中的onMessage事件做出反应:

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
       if(request.canvas) {
          plugin.data.canvas = request.canvas;
          // do something with the screenshot
        }
    }
);
希望有帮助!:)

[编辑]

刚找到这个:

看起来他们正在处理一个本机函数。这将被称为:

webview.captureVisibleRegion({ format: "png" }, function(dataUrl) { 
  var image = new Image();
  image.src = dataUrl;
  document.body.appendChild(image);
});