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