2017-07-10 9 views
0

現在、別のページから複数のスクリーンショットを取得してエンドポイントに投稿するGoogle Chrome拡張機能をビルドしています。 私が持っている問題は、タイミングがオフであるということです。私が言っていることは、スクリーンショットが読み込みが停止する前に、スクリーンショットが早すぎるということです。 2つ目は、リンクタイプWE(PAタイプの最初のものではない)から2つ目のスクリーンショットを受信することです。アクションが速すぎてPAをスキップするだけです。私はJSで本当にうまくいきません。誰かがこのコードをより良くするための指針を持っていれば、私はすべて耳です。ありがとうございました。Google Chromeの拡張機能のjavascriptのスクリーンショット

background.js

var id = 100; 
var currentObject; 
var myTimer; 

function wait() 
    {setTimeout(wait, 1000);} 

chrome.browserAction.onClicked.addListener(
function fireTimer() { 
    localStorage["allLocations"] = JSON.stringify([{ 
     'type': 'PA', 
     'url': 'https://app.powerbi.com/groups/me/reports/ReportSection2?chromeless=true' 
    }, 
    { 
     'type': 'WE', 
     'url': 'https://app.powerbi.com/groups/me/reports/ReportSection?chromeless=true' 
    }]); 
    myTimer = setInterval(fireScreenshots, 1*60*1000); 
}); 

function fireScreenshots(){ 
    var allLocations = JSON.parse(localStorage["allLocations"]); 
    allLocations.forEach(function (arrayItem) 
    { 
     if (arrayItem.type != undefined && arrayItem.url != undefined){ 
     retrieveWebPage(arrayItem) 
     } 
    }); 
} 

function retrieveWebPage(data){ 
    currentObject = data; 
    chrome.tabs.update({ 
     url: currentObject.url 
    }); 
    chrome.tabs.onUpdated.addListener(function updatedListener(tabId , info) { 
    chrome.tabs.onUpdated.removeListener(updatedListener); 
    if (info.status == 'complete' && currentObject != undefined) { 
    chrome.tabs.captureVisibleTab(null, {format: "jpeg", quality: 100}, function(screenshotUrl) { 
     var xhr = new XMLHttpRequest() , formData = new FormData(); 
     formData.append("image", screenshotUrl); 
     formData.append("dashboard_type", currentObject.type); 
     xhr.open("POST", "http://intranet/api/powerbi/screenshots_upload/"); 
     xhr.send(formData); 
    }); 
    } 
}); 
} 
+1

「待機」機能とは何を意味していますか?あなたのコードのどこかで呼び出したとしても、何もしません。 – Clonkex

+0

それはまったく何もしません、私は以前の試みで物事を遅らせようとしていました。 –

+0

現代のWebページは、DOMロード/完了イベントの後に発生するスクリプトを使用して自分自身を構築します。一番簡単な解決策は、10000msのようにsetTimeoutにcaptureVisibleTabコードをラップすることです。 – wOxxOm

答えて

1

それは検証info.status == 'complete'は、ページがロードされていることを知っているだけでは十分ではないことを奇妙です。

1秒のタイムアウトは、問題を一時的に解決する可能性があります。ロード中のWebページのスクリプトの中には、DOMのロードが終了した後でも(特にSPAタイプのアプリケーションでは)、Webページを更新/表示する作業が行われている可能性があります。

setTimeout(function() { 
chrome.tabs.captureVisibleTab(null, {format: "jpeg", quality: 100}, function(screenshotUrl) { 
     var xhr = new XMLHttpRequest() , formData = new FormData(); 
     formData.append("image", screenshotUrl); 
     formData.append("dashboard_type", currentObject.type); 
     xhr.open("POST", "http://intranet/api/powerbi/screenshots_upload/"); 
     xhr.send(formData); 
    }); 
}, 1000); 
+0

説明をいただきありがとうございます。 –

関連する問題