使用Chrome用户脚本将脚本附加到正文

时间:2011-12-29 12:44:24

标签: jquery google-chrome

我想在Chrome中使用Greasemonkey样式用户脚本向给定页面添加脚本。

我使用此trick将jQuery添加到我的用户脚本中。

如果我尝试使用jQuery的append-method将<h1>Test</h1>添加到页面主体,一切正常。

但是如果我尝试附加一个JS脚本没有任何反应。

如何解决此类问题?

这是我的.user.js文件:

// ==UserScript==
// @match http://*/*
// ==/UserScript==

// a function that loads jQuery and calls a callback function when jQuery has finished loading
function addJQuery(callback) {
  var script = document.createElement("script");
  script.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js");
  script.addEventListener('load', function() {
    var script = document.createElement("script");
    script.textContent = "(" + callback.toString() + ")();";
    document.body.appendChild(script);
  }, false);
  document.body.appendChild(script);
}

// the guts of this userscript
function main() {

$(document).ready(function() {
    $('body').append('<script type="text/javascript" src="http://timkl.com/wip/bibobRedesign/js/jquery.contenthack.js"></script>');
});

}

// load jQuery and execute the main function
addJQuery(main);

1 个答案:

答案 0 :(得分:2)

jQuery处理脚本元素的方式与其他DOM元素不同。此answer中还有其他详细信息。

要附加脚本,最安全的方法是使用与插入jQuery库相同的方法。

function main() {
    var script = document.createElement("script");
    script.setAttribute("src", "http://timkl.com/wip/bibobRedesign/js/jquery.contenthack.js");
    document.body.appendChild(script);
    $(document).ready(function () {
        //$('body').append();
    });
}

未经测试的选项
如果要加载 lot 脚本,请查看脚本加载器(例如LABjs

可能能够执行以下操作:

function addLABjs(callback) {
    var script = document.createElement("script");
    script.setAttribute("src", "http://somepath.to/LAB.js");
    script.addEventListener('load', function () {
        var script = document.createElement("script");
        script.textContent = "(" + callback.toString() + ")();";
        document.body.appendChild(script);
    }, false);
    document.body.appendChild(script);
}

// the guts of this userscript


function main() {
    $LAB.script("http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js").wait()
        .script("http://timkl.com/wip/bibobRedesign/js/jquery.contenthack.js")
        .script("YourOtherScript.js").wait();

    $(document).ready(function () {
    });
}

addLABjs(main);