Цей скрипт не слід встановлювати безпосередньо. Це - бібліотека для інших скриптів для включення в мета директиву // @require https://update.greasyfork.org/scripts/429613/975941/GM_Polyfill.js
GM_Polyfill
在没有脚本管理器环境下提供常用的GM_
函数和对象,目前提供的函数和对象有:
- GM_setValue
- GM_getValue
- GM_listValue
- GM_deleteValue
- GM_xmlhttpRequest
- GM_openInTab
- GM_setClipboard
- unsafeWindow
用法
引用/热加载/引入此js库
请务必确保GM_Polyfill库在您的代码调用相关GM_
函数前加载完毕。如果您的脚本运行环境不支持@require
,那么您就应动态加载GM_Polyfill库(下为动态加载可用代码),或者将本库的代码复制到您的脚本中。
// Load GM_Polyfill
loadJS('https://greasyfork.org/scripts/429613/code/GM_Polyfill.js', function() {
// Your code here...
})
// Load javascript from given url
function loadJS(url, callback, oDoc = document) {
var script = document.createElement('script'),
fn = callback || function () {};
script.type = 'text/javascript';
//IE
if (script.readyState) {
script.onreadystatechange = function () {
if (script.readyState == 'loaded' || script.readyState == 'complete') {
script.onreadystatechange = null;
fn();
}
};
} else {
//其他浏览器
script.onload = function () {
fn();
};
}
script.src = url;
oDoc.getElementsByTagName('head')[0].appendChild(script);
}
使用GM_Polyfill库填补缺失的GM_
函数
GM_Polyfill库仅仅提供一个接口:GM_PolyFill
函数(注意大小写),调用此函数就会自动填充缺失的GM_
函数。
返回值:一个对象,标明了各个函数是否因为缺失而被GM_Polyfill库填补,其结构如下:
const GM_POLYFILLED = {
GM_setValue: boolean,
GM_getValue: boolean,
GM_deleteValue: boolean,
GM_listValues: boolean,
GM_xmlhttpRequest: boolean,
GM_openInTab: boolean,
GM_setClipboard: boolean,
}
GM_PolyFill
函数仅接受一个
字符串参数:
name
。此参数将作为存储空间中访问您的脚本储存空间的凭据,不同的
name
对应着不同的储存空间。所有的
GM_
存储函数都将在此
name
所对应的存储空间下工作。如果不提供此参数,将默认此参数值为
'default'
。如果您不知道此参数应该填写什么,那么建议填写
脚本名称(即@name)+脚本命名空间(即@namespace)
有关name
的更多说明类比来说,就像Tempermonkey存储空间的沙盒机制——即每个脚本的存储空间与其他脚本的存储空间相互独立一样,GM_Polyfill库提供的存储机制和也力图将不同的脚本的储存空间区分开来;但是由于GM_Polyfill库运行在一个没有脚本管理器的低权限环境下,无法区分不同的脚本,于是就通过脚本调用时主动提供一个
name
参数,依此来区分不同的脚本,并提供不同的储存空间;但请注意,这仅仅能大概率上防止储存空间的意外冲突,但并不能阻止其他脚本甚至是网页代码来试图读取您储存的信息,任何脚本或代码都可以从localStorage中读取您的脚本储存的信息,并修改这些信息(无论是无意的还是有意的)。
说明
有关功能
本程序的工作原理为通过原生js实现了部分GM_函数,所以会有诸多功能上的限制,具体的限制如下:
GM_setValue
GM_getValue
GM_listValue
GM_deleteValue
的所有数据均存储在localStorage['GM_STORAGE_POLYFILL'][name]
下,任何其他代码均能任意访问、修改和删除存储空间内的数据。使用时,应当使用不同的name
参数以避免冲突,并且避免存储敏感数据以降低恶意的访问带来的风险。GM_xmlhttpRequest
不能执行跨域请求。不支持details参数的synchronous binary nocache revalidate context fetch
属性,不支持onload事件处理器函数参数的finalUrl
属性GM_openInTab
仅仅是通过window.open
简单地打开新窗口,仅仅支持参数一(url),不支持参数二GM_setClipboard
仅仅在事件处理函数中有效
示例(使用了GM_Polyfill库的)脚本:
轻小说文库+:使用了GM_Polyfill库使其可以完全脱离脚本管理器的执行环境,甚至可以直接通过书签动态加载到页面并正常执行。