Javascript 如何在@require(Greasemonkey)中使用自定义变量

Javascript 如何在@require(Greasemonkey)中使用自定义变量,javascript,Javascript,在我的脚本中,有许多@要求。它看起来像: @require pathA/file1 @require pathA/file2 有时我需要更改pathA,之后它看起来是这样的: @require pathB/file1 @require pathB/file2 是否可以使用以下变量: PATH = pathA @require $PATH/file1 @require $PATH/file2 加载脚本后,无法更改userscript的元数据块(包括其@requires),但可以创建一个助手

在我的脚本中,有许多
@要求
。它看起来像:

@require pathA/file1
@require pathA/file2
有时我需要更改
pathA
,之后它看起来是这样的:

@require pathB/file1
@require pathB/file2
是否可以使用以下变量:

PATH = pathA 
@require $PATH/file1
@require $PATH/file2

加载脚本后,无法更改userscript的元数据块(包括其
@require
s),但可以创建一个助手函数,该函数接收脚本URL并将该脚本附加到DOM:

const appendScript = url => new Promise(
  (resolve) => {
    const script = document.createElement('script');
    script.onload = resolve;
    script.src = url;
    document.body.appendChild(script);
  }
);
const path = 'pathA'; // change this string when needed
Promise.all([
  appendScript(path + '/file1'),
  appendScript(path + '/file2')
])
  .then(() => {
    // everything is loaded
  });
Live snippet示例,以便您可以看到代码正常工作:

const appendScript=url=>新承诺(
(解决)=>{
const script=document.createElement('script');
script.onload=解析;
script.src=url;
document.body.appendChild(脚本);
}
);
常量路径='pathA';//需要时更改此字符串
我保证([
追加脚本('https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js'),
追加脚本('https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js')
])
.然后(()=>{
log('React已加载!');

});我不能让它工作。有什么把戏吗?我必须将所有代码都放在“//所有内容都已加载”之间吗?。或者,是否可以为我提供一个完整的可运行脚本,这样我就可以通过简单的复制和粘贴来运行它?它对我来说很好,没有任何技巧或任何东西-如果您愿意,请参阅答案中的堆栈片段,以供现场演示。是的,因为脚本加载是异步的,所以依赖于它的所有内容都应该在
中。然后
现在就可以工作了。但有一个问题。在我的测试中,如果插入的链接是某个正式的js,则没有问题。但是如果我插入我的lib,其中只有一个类具有静态方法,它似乎不起作用。你有什么理想吗?不看代码是不可能的-你能发布一个吗?问题是
https://gitlab.ps.nwcdcloud.cn/lhengyu/test/raw/master/test.js
site-它不是提供Javascript,而是作为
text/plain
提供,浏览器出于安全原因将拒绝执行。请参阅错误消息:
拒绝从执行脚本'https://gitlab.ps.nwcdcloud.cn/lhengyu/test/raw/master/test.js'因为它的MIME类型('text/plain')不可执行,并且启用了严格的MIME类型检查。