Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我可以得到一个userscript';s版本并在其他网页上使用?_Javascript_Html_Version Control_Tampermonkey - Fatal编程技术网

Javascript 我可以得到一个userscript';s版本并在其他网页上使用?

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”的效果 我的页面(

因此,我知道您可以获取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”的效果

我的页面(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
    ...