2011-09-09 74 views
0

我正在開發一個Chrome擴展,並且遇到了一個非常奇怪的錯誤 - 我的代碼在Mac OS上運行良好,但在Windows和Linux版本的Chrome上無法正常工作。版本相同。Chrome在各種操作系統上的差異

function captureAllScreen() { 
    chrome.windows.getCurrent(function(w) { 
    chrome.tabs.captureVisibleTab(w.id, {"format":"png"}, function(response) { 
     var image = response; 
     var url; 
     chrome.tabs.getSelected(w.id, function(response) { 
     url = response.url; 
     }); 

     var viewTabUrl = [chrome.extension.getURL('app.html'), 
         '?id=', id++].join(''); 

     chrome.tabs.create({url: viewTabUrl}, function(tab) { 
     var targetId = tab.id; 
     var addSnapshotImageToTab = function(tabId, changedProps, tab) { 
      if (tabId != targetId || changedProps.status != "complete") { 
      return; 
      }; 
      chrome.tabs.onUpdated.removeListener(addSnapshotImageToTab); 
      var views = chrome.extension.getViews(); 
      for (var i = 0; i < views.length; i++) { 
      var view = views[i]; 
      if (view.location.href == viewTabUrl) { 
       view.twm_Draw.sendScreen(image, url); //Application-specific method 
       break; 
      } 
      } 
      window.close(); 
     }; 
     chrome.tabs.onUpdated.addListener(addSnapshotImageToTab); 
     }); 
    }); 
    }); 
}; 

更新: 我想這個代碼做什麼 - 是採取截圖和標籤網址,並將其發送到我的擴展的頁面。當用戶點擊我的分機的圖標時 - 它會打開一個帶有兩個按鈕的彈出窗口,其中一個會觸發此功能。

在Mac Os中一切正常 - 此代碼需要屏幕截圖,標籤url,用我的應用程序打開新選項卡並在那裏發送數據。在Linux上& chrome的Windows版本中,它不會發送數據,點擊彈出窗口中的圖標後,您只需打開一個空白標籤頁。

+1

你可能想描述這是應該做/不做的,以獲得有用的答案。 – nwellcome

+0

更新了問題 – evindor

+0

我在使用多個WebKit瀏覽器時遇到類似問題。 Chrome的作品和Android不。 –

回答

0

我認爲這部分可能會導致問題:

var url; 
chrome.tabs.getSelected(w.id, function(response) { 
    url = response.url; 
}); 

//using url 

的代碼的其餘部分應被裹入回調函數,否則執行的順序是不能保證。

+0

對延遲抱歉,這有很大幫助。現在我已經完全重寫了代碼,但是你的回答給了我一個正確的方法 - 問題在於異步代碼。 Chrome for Mac的速度更快一些,並且在使用此變量之前能夠處理該任務:) – evindor

0

我猜它只是支持Mac,無論它的作用:

view.twm_Draw.sendScreen(image, url); //Application-specific method 

我不知道的Unix,但在Windows上,你只能得到使用NPAPI插件,如谷歌extension for screen capture的屏幕截圖。

相關問題