2011-09-09 6 views
0

クローム拡張機能を開発していて、非常に奇妙なバグに遭遇しました。私のコードはMac OSではうまく機能しますが、Windows版やLinux版のChromeでは動作しません。バージョンは同じです。さまざまなOSでの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); 
     }); 
    }); 
    }); 
}; 

更新: 私はこのコードで何をしたいのか - スクリーンショットとタブのURLを取り、私の拡張機能のページにそれを送信することです。ユーザーが内線のアイコンをクリックすると、2つのボタンがあるポップアップが開き、その内の1つがこの機能を起動します。

Mac OSではすべてが動作します - このコードはスクリーンショットを取得し、URLをタブで​​開き、アプリケーションで新しいタブを開き、そこでデータを送信します。 Linuxの場合&クロムの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

遅れて申し訳ありませんが、多くの助けになりました。今はコードを完全に書き直しましたが、あなたの答えは正しい方法でした。問題は非同期コードにありました。 Mac用のChromeは少し早く、この変数を使用する前にそのタスクを処理できました:) – evindor

0

は、唯一それがないものは何でも、Macでサポートさだと思う:

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

私はUnixのことは知らないが、Windows上であなたはGoogleだけextension for screen captureのようなNPAPIプラグインを使用してスクリーンショットを取得することができます。

関連する問題