阅读:2490回复:3
复制标签历史记录的脚本失效了,求修补【已解决】
原来有个脚本,作用是打开新标签时保留来源标签的历史(源码见文末)
例如标签A为本论坛,历史是{第2页,第3页,第4页},长按“返回”按钮会显示三行记录,分别是2、3、4页 中键在新标签B打开“第5页”链接后,新标签B并不会继承来源标签A的历史记录,在标签B长按返回按钮不会有效果,利用fire gesture等方法强行显示的话,能看见历史只有{第5页}一项 脚本的作用就是使得标签B继承标签A的历史,新标签打开后显示历史为{第2页,第3页,第4页,第5页} 升级到55b1开发者版后,脚本失效,任何新打开的标签均抛出异常,例如拖拽打开新标签时的异常为: Exception { 一个在本机上可复现的测试脚本 var tabB = gBrowser.mCurrentTab; 1. 复制脚本到代码草稿纸内,切换为chrome运行环境 2. 新建标签A打开任意论坛(例如本论坛),点击右上角的翻页数字,依次点击2、3、4页。此时长按地址栏旁边“返回”按钮(←)应该能看见数行历史记录(sessionHistory) 3. 中键点击第5页数字链接,在新标签B打开第5页,并切换到新标签B。保证标签A、B相邻且A在B的左边。 4. 回到代码草稿纸,以“显示”模式(Ctrl+L)运行脚本 期望结果 无特殊显示,无异常。在标签B长按“返回”按钮出现新的历史记录。实际结果 Exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISHistoryInternal.addEntry]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: Scratchpad/2 :: <TOP_LEVEL> :: line 7" data: no] 原脚本全文 // ==UserScript== |
|
|
1楼#
发布于:2017-08-09 12:46
应该跟 https://bugzilla.mozilla.org/show_bug.cgi?id=1363036 附件的 Part2 有关
newHistory.addEntry(currentHistory.getEntryAtIndex(i, false), true); 改成 let entry = currentHistory.getEntryAtIndex(i, false); let newEntry = Cc["@mozilla.org/browser/session-history-entry;1"].createInstance(Ci.nsISHEntry); newEntry.setURI(entry.URI); newEntry.setTitle(entry.title); newHistory.addEntry(newEntry, true); |
|
|
2楼#
发布于:2017-08-09 17:18
cinhoo:应该跟 https://bugzilla.mozilla.org/show_bug.cgi?id=1363036 附件的 Part2 有关感谢cinhoo的指点! 修改之后运行正常,无报错!论坛果然卧虎藏龙 可惜即使修补好了脚本,脚本的生存土壤chromejs也要被死亡宣告了 虽然猜到复制新的entry可能有效,但是因为对组件API的不了解导致采用了错误的方法进行复制,无效后就没尝试了……果然专业的事还是得专业的人来才行 |
|
|
3楼#
发布于:2017-08-09 17:20
cinhoo:应该跟 https://bugzilla.mozilla.org/show_bug.cgi?id=1363036 附件的 Part2 有关大佬爱你哟 |
|
|