为什么我非常简单的Chrome扩展在Mac而不是PC上工作?

我写了一个非常简单的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> 

它所做的只是允许您从窗口中拉出一个选项卡,而不会从窗口中丢失该选项卡和url。 它基本上复制该标签,当你分离它。

问题是,这在Mac上完美的工作,但当我已经在两个不同的Windows机器上尝试它,我得到这个错误

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

看来tab对象没有被传入getcallback。 有谁知道这可能是为什么? 这显然是当我在Mac上运行的代码。

问题是分离后的标签ID更改(旧的不再存在)。 不知道是否是一个错误或功能,但如果它是不一致的Mac和PC之间,那肯定是一个错误(可能只是性能差异 – API方法执行比在不同的计算机上选项卡分离更快)。

mrtsherman与解决方法是正确的轨道,只有而不是保存id你应该保存info因为该id没有任何意义了。 然后你将有所有的信息来重新创建一个标签(使用附加的info来获取标签ID,并保存分离的info以获得旧的位置和窗口)。

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

  1. OnDetached – 存储标签的ID和它的窗口ID
  2. OnAttached – 检查标签ID是否与存储的标签ID匹配,并且该窗口ID现在不同。 如果是这样,那么在旧窗口中创建新的选项卡。

行为看起来不可思议。 也许提交一个错误报告?