为什么我的非常简单的Chrome扩展程序可以在Mac上运行而不是PC?

时间:2011-09-21 18:57:02

标签: javascript windows macos google-chrome-extension

我编写了一个非常简单的Chrome扩展程序。它由以下背景页面组成:

<script type="text/javascript">

chrome.tabs.onDetached.addListener(function(tabId, info){
    var id = tabId;
    chrome.tabs.get(id, function(tab) {
        chrome.tabs.create({
            windowId : info.oldWindowId, 
            index : info.oldPosition, 
            url : tab.url
        });
    });
});

</script>

它所做的只是允许您从窗口中拉出一个选项卡而不会从窗口中丢失该选项卡和Web地址。它在拆分时基本上会复制选项卡。

问题是这在Mac上完美运行但是当我在两台不同的Windows机器上试用它时我得到了这个错误

background.html:7Uncaught TypeError: Cannot read property 'url' of undefined

看来tab标签没有传递给get回调。有谁知道为什么会这样?很明显,当我在Mac上运行代码时。

2 个答案:

答案 0 :(得分:1)

所以这是我能想到的唯一解决方法:

  1. OnDetached - 存储选项卡的ID及其窗口ID
  2. OnAttached - 检查选项卡ID是否与存储的选项卡ID匹配,并且窗口ID现在不同。如果是,则在旧窗口中创建新选项卡。
  3. 行为似乎很不稳定。也许提交错误报告?

答案 1 :(得分:1)

问题是分离标识在分离后发生了变化(旧标记不再存在)。不确定它是错误还是功能,但如果Mac和PC之间不一致那么它肯定是一个错误(可能只是性能差异 - api方法执行速度比不同计算机上的tab分离更快)。

mrtsherman 处于正确的解决方法,只是保存id而不是保存info,因为id不再具有任何意义。然后,您将获得重新创建选项卡的所有信息(使用附加info获取选项卡ID,并保存分离的info以获取旧位置和窗口。)