Javascript 我可以得到一个userscript';s版本并在其他网页上使用?
因此,我知道您可以获取userscript的版本信息,并将其用作userscript中的变量,如Javascript 我可以得到一个userscript';s版本并在其他网页上使用?,javascript,html,version-control,tampermonkey,Javascript,Html,Version Control,Tampermonkey,因此,我知道您可以获取userscript的版本信息,并将其用作userscript中的变量,如 // @version 1.2.1 // @grant GM_info var version = GM_info.script.version; console.log(`${version}`); // 1.2.1 我想我可以在不同的网页上使用这个变量。在本例中,我希望在安装说明页面上显示最新版本,以便它显示“Script name v.1.2.1”的效果 我的页面(
// @version 1.2.1
// @grant GM_info
var version = GM_info.script.version;
console.log(`${version}`); // 1.2.1
我想我可以在不同的网页上使用这个变量。在本例中,我希望在安装说明页面上显示最新版本,以便它显示“Script name v.1.2.1”的效果
我的页面(install.html)上有这样一个标签
<td>Script Name v.<span id="version"></span></td>
我做错了什么,或者这是可能的
注意:即使此人尚未安装userscript,我也希望此功能正常工作。是的,您可以在网页上显示userscript数据,前提是网页或您的托管服务器可以查看并
获取脚本(可能跨域)
但是
不起作用,因为:
它以普通javascript的形式读入并运行脚本。您无法阅读源代码或脚本元数据所在的注释
许多脚本主机,如GitHub,根本不会将文件提供给
标记(CORS被阻止)。或者,有些是这样,但发送了错误的mime类型
Tampermonkey无法为
节点启动,如果可以,这将是一场重大的安全灾难
因此,显然,gmu info
将不可用
事实上,如果脚本使用任何本机函数,即使加载也会崩溃。请注意,这并不意味着元数据。这本身是无害的
如果需要@require
或@resource
资产,则同上。(并且不是由页面独立加载的。)
您必须以文本形式读入userscript,然后解析字符串以获取版本信息。
例如:
以下代码将获得该版本:
$.get(“https://cdn.jsdelivr.net/gh/BrockA/SE-misc/Add_kbd_sup_sub_shortcuts.user.js,scrptTxt=>{
var versionMatch=scrptTxt.match(/\/\/\s++@version\s+([0-9.]+)/i);
如果(versionMatch&&versionMatch.length>1){
console.log(“脚本版本:”,versionMatch[1]);
}
否则{
console.log(“未找到版本元数据”);
}
} );代码>
TBH,我看了一遍,完全不知道那里发生了什么……所以要说清楚,我的网页需要链接jquery。我在那个页面上运行$。那么,我使用//@grant gmu info会打破第5条中的规定吗?@Pshock13,grant本身不会打破一个
,它只是将其视为一条评论(你的页面看不到)。至于$。get
和jQ:简短的回答是肯定的。长话短说,您可以在vanilla.js中使用ajax,但这并不能有效地利用您或我的时间,并且超出了这个问题的范围。。。最后,这些编号的要点适用于
方法,而不是$.get()
方法。好的,我也把$.get
放在我的install.html页面的末尾吗?完全复制了那里的内容,工作正常,记录了版本。放入我的文件位置并阻止跨源请求:同源策略不允许读取https:/…/Scripts/scriptName.user.js上的远程资源。(原因:CORS标题“访问控制允许来源”缺失)
(我在这里编辑了实际地址)
<script src="Scripts/scriptName.user.js"></script>
document.getElementById("version").innerText=`${version}`;
// ==UserScript==
// @name StackExchange, Add kbd, sup, and sub shortcuts
...
// @version 4.2
...