似乎没有任何关于这些函数如何工作的信息。我猜想这些是Tampermonkey专属的函数?看起来他们被设计成允许当前正在运行的Tampermonkey脚本之间的通信;一个替代性的方法来不断地轮询GM_Value存储的变化。这是一个非常有趣的想法。
但是,我不知道如何使用它们,他们采取什么值,以及什么样的对象,你回来?你如何使用这三个函数,我对它们的目的是正确的吗?
GM_getTab(cb) 获取一个对象,只要这个标签页是打开的,这个对象就会持久化。
GM_saveTab(tab) 保存tab对象,以便在页面卸载后重新打开它。
GM_getTabs(cb) 在数组中获取所有tab对象,以便与其他scrips实例通信。
我从来没有尝试过使用它们,但是看代码,这些似乎是能够从每个标签页中存储你想要的任何东西,并且还能让所有标签页以这种方式存储所有东西。
在两个chrome控制台上,我运行了以下内容。
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号标签页):
对象 {rand: 0.9303610376082361}VM779: 11 0.9303610376082361VM779: 14其他标签页: 366有值:0.417106909211725VM779:13我敢打赌,我就是那个名为:371的标签。
我使用这个用户脚本在chrome控制台中添加了访问权限,(根据指定的说明,在 @match
page).我看到这些数据在我关闭设置它的标签页后,仍然可以通过GM_getTabs()访问。
// ==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()访问。我不知道我会不会指望这个,但我可能会尽量减少我留下的东西。
lossleader的回答很完整。简而言之。GM_getTab()
过关 拷贝 的 "标签对象 "到 cb
(现在是 callback
在Tampermonkey的最新文档中)。) GM_saveTab()
拯救了 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()
&amp。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 { … }
(更新) "tab对象 "被传递给了 "回调"。callback
脚本之间是隔离的,所以脚本A得到的 "tab对象 "与脚本B不同。
setTabExpr1.user.js:26:15 {…}
+ a: 1234567
+ <prototype>: Object { … }
setTabExpr2.user.js:26:15 {…}
+ b: 7654321
+ <prototype>: Object { … }