Chrome在各种操作系统上的差异

时间:2011-09-09 14:43:52

标签: javascript google-chrome-extension

我正在开发一个chrome扩展程序,我遇到了一个非常奇怪的错误 - 我的代码在Mac OS上运行良好,但在Windows和Linux版本的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中,一切正常 - 此代码采用屏幕截图,标签网址,用我的应用程序打开新标签并在那里发送数据。在Linux&amp; Windows版本的chrome不发送数据,点击弹出窗口中的图标后,您只需打开一个空白标签。

2 个答案:

答案 0 :(得分:0)

我认为这部分可能会导致问题:

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

//using url

其余代码应该包含在回调函数中,否则无法保证执行顺序。

答案 1 :(得分:0)

我猜它只支持Mac,无论它做什么:

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

我不了解Unix,但在Windows上,您只能使用像Google extension for screen capture这样的NPAPI插件获取屏幕截图。