我想在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);
答案 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);