使用Greasemonkey脚本将来自其他站点的javascript添加到页面

使用Greasemonkey脚本将来自其他站点的javascript添加到页面,javascript,greasemonkey,Javascript,Greasemonkey,是否可以使用Greasemonkey脚本将来自其他站点的JS脚本添加到页面中,以便它们运行?是的,您可以这样做,例如: let script = document.createElement('script'); script.src = "http://example.com/somescript.js"; document.body.appendChild(script); // execute the script document.body.removeChild(script);

是否可以使用Greasemonkey脚本将来自其他站点的JS脚本添加到页面中,以便它们运行?

是的,您可以这样做,例如:

let script = document.createElement('script');
script.src = "http://example.com/somescript.js";
document.body.appendChild(script);  // execute the script
document.body.removeChild(script);

您只需创建一个脚本元素并将其添加到文档中

// ==UserScript==
// @name       My Fancy New Userscript
// @description  enter something useful
// @match      http://*/*
// ==/UserScript==

(function () {
    var scriptElement = document.createElement( "script" );
    scriptElement.type = "text/javascript";
    scriptElement.src = "url to your script";
    document.body.appendChild( scriptElement );
})();
如果您只是想让脚本运行,那么这就足够了。 如果您想在用户脚本中使用jQuery这样的库,那么它会变得很棘手。 我知道有两种方法:

  • 一种是使用greasemonkey的标签
  • 另一个需要创建如上所示的脚本元素,但您需要等待它加载,因此需要
    scriptElement.onload=function(){}
    ,然后必须使用
    unsafeWindow
    从库中访问变量

如果这是纯greasemonkey脚本,我建议使用第一种方法,因为只有than you脚本是从站点封装的。

+1 for
@require
。您不需要将此代码封装在匿名函数中。我是否可以多次使用变量
scriptElement
来提取多个外部Java脚本?(比如script1.js和script2.js)还有,有没有办法判断这是否真的执行并将其添加到站点?由于它为我引入了一个脚本,该脚本将从远程.js脚本中引入实时信息和数据,而不是,因此我再次更改src意味着更改文档中元素的值。为了安全起见,我会用多个变量创建多个元素。这就是我的想法,所以我创建了三个元素:
scriptElement1
scriptElement2
scriptElement3
,所有这些元素都工作正常。我弄明白了为什么它没有拉入数据-DNS解析被破坏了,因为我忘记了更新本地DNS服务器信息。如果我需要从http加载脚本以用于httpsWill,那么它的可能副本将不起作用。这总是执行脚本吗?在移除子对象之前不需要等待执行确认?