我写了一个非常简单的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对象没有被传入get
callback。 有谁知道这可能是为什么? 这显然是当我在Mac上运行的代码。
问题是分离后的标签ID更改(旧的不再存在)。 不知道是否是一个错误或功能,但如果它是不一致的Mac和PC之间,那肯定是一个错误(可能只是性能差异 – API方法执行比在不同的计算机上选项卡分离更快)。
mrtsherman与解决方法是正确的轨道,只有而不是保存id
你应该保存info
因为该id
没有任何意义了。 然后你将有所有的信息来重新创建一个标签(使用附加的info
来获取标签ID,并保存分离的info
以获得旧的位置和窗口)。
所以这是我能想到的唯一解决方法:
行为看起来不可思议。 也许提交一个错误报告?