2014-12-01 52 views
1

我工作的Chrome信息亭應用程序(所以打包應用程序的限制適用),其本質上是一個Web瀏覽器將被部署到一些Chrome設備。我期待支持截圖,和我使用HTML2Canvas要做到這一點,但我需要存儲他們稍後上傳。從谷歌瀏覽器網頁視圖獲取數據,來電/父窗口

我打電話給HTML2Canvas通過使用webview.executeScript {file:}與回調。在回調,我執行的實際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 });"}); 
    } 

我可以在畫布對象追加到身體,看到截圖工作。不過,我需要這個被返回給調用者。

我試過使用localStorage,但似乎webviews存儲和調用者的存儲是兩個不同的東西。

這實際上歸結爲我需要能夠在Webview和創建Webview的窗口之間溝通「內容」。

回答

1

負載與以下行的網頁流量,以確保一切加載,一旦你執行腳本吧:

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 
     } 
    } 
); 

希望這有助於! :)

[編輯]

剛剛發現這一點: https://code.google.com/p/chromium/issues/detail?id=326755

好像他們是在一個本地函數工作。這則這樣調用:

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