似乎没有关于这些功能如何工作的任何信息。我认为这些是Tampermonkey独有的功能?
看起来它们被设计为允许当前运行的Tampermonkey脚本之间的通信;替代连续轮询GM_Value存储以进行更改。这是一个非常有趣的想法。
但我不知道如何使用它们;他们接受了什么价值,以及你得到什么样的对象? 你如何使用这三个功能,我的目的是否正确?
GM_getTab(CB)
只要此选项卡处于打开状态,就获取一个持久的对象。GM_saveTab(制表符)
保存选项卡对象以在页面卸载后重新打开它。GM_getTabs(CB)
获取数组中的所有选项卡对象以与其他scrips通信 实例
答案 0 :(得分:4)
我从未尝试过使用它们,但是看一下代码,这些代码似乎是能够从每个标签中存储/获取您想要的任何内容,并且还可以通过所有标签以这种方式存储所有内容。
在两个镀铬控制台上,我运行了以下内容:
var this_tab_data, all_tabs, n;
GM_getTab(function (o) {
this_tab_data = o;
n = this_tab_data.rand = Math.random();
GM_saveTab(this_tab_data);
console.info(this_tab_data);
GM_getTabs(function (db) {
all_tabs = db;
console.info(n);
for (var i in all_tabs) {
if (all_tabs[i].rand === n) console.info("I bet I am the tab named: " + i);
else console.info("Other tab: " + i + " has value: " + all_tabs[i].rand);
}
});
});
结果(在标签2中):
Object {rand: 0.9303610376082361} VM779:11 0.9303610376082361 VM779:14 Other tab: 366 has value: 0.417106909211725 VM779:13 I bet I am the tab named: 371
我使用此用户脚本在Chrome控制台中添加了访问权限(根据指示的@match
页面上的说明):
// ==UserScript==
// @name My Fancy New Userscript
// @namespace http://use.i.E.your.homepage/
// @version 0.1
// @description enter something useful
// @match http://stackoverflow.com/questions/14059078/use-the-tampermonkey-api-from-the-chrome-console
// @copyright 2012+, You
// ==/UserScript==
unsafeWindow.GM_getTab = GM_getTab;
unsafeWindow.GM_saveTab = GM_saveTab;
unsafeWindow.GM_getTabs = GM_getTabs;
作为旁注,我看到在关闭设置它的选项卡后,GM_getTabs()仍可访问此数据。我不确定我会依靠它,但我可能会尽量减少我留下的东西。
答案 1 :(得分:0)
损失负责人的答案已完成。简而言之,GM_getTab()
将“标签对象”的副本传递给cb
(现在,它是Tampermonkey的最新文档中的callback
),{{1} }将GM_saveTab()
对象保存到 real “选项卡对象”中,并且tab
将运行当前脚本的所有选项卡传递给GM_getTabs()
,作为哈希值。
因此,确定浏览器标签的过程应为:
cb
或使用// Get it
GM_getTab(function(tabObj) {
// Modify it
tabObj.id = genID();
// And store it
GM_saveTab(tabObj);
})
:
Promise
(另外)new Promise(r => GM_getTab(r)).then(function(tabObj) {
tabObj.id = genID();
GM_saveTab(TabObj);
})
和GM_getTab()
传递给回调的内容是:
GM_getTabs()
(更新)传递给getTab(): {…}
+ id: "166471588778160035"
+ <prototype>: Object { … }
getTabs(): {…}
+ 9: Object { id: "166471588778160035" }
+ 25: Object { id: "599671588779026059" }
+ 26: Object { id: "154331588779031451" }
+ 31: Object { id: "622271588779033558" }
+ 33: Object { id: "542881588779039564" }
+ 36: Object { id: "112571588779028937" }
+ 38: Object { id: "549981588779038186" }
+ <prototype>: Object { … }
的“标签对象”在脚本之间是隔离的,因此scriptA获得了与scriptB不同的“标签对象”
callback