我目前正在尝试使用jQuery在网页上动态插入JS块,但它无法正常工作。我试过这个:
var body = $('body');
var injectJs = $('<script type=text/javascript>' +
'$(document).click(function() {' +
'dropMenu("dropMenu1", 0);' +
'});');
body.append(injectJs);
编辑:16:26
我已成功通过这种方式插入代码:
/* Importation de Tool.js */
var scriptImport = document.createElement('script');
scriptImport.type = 'text/javascript';
scriptImport.src= chrome.extension.getURL('js/Tool.js');
head.appendChild(scriptImport);
/* Injection du script onClick */
var script = document.createElement('script');
script.type = 'text/javascript';
script.innerHTML = "document.addEventListener('click', function(){ dropMenu('slideUp', 0); alert('TRY ME AGAIN'); });";
并且dropMenu:
function dropMenu(dropMenuPage, marginLeft)
{
var msg = "";
msg = msg.concat(dropMenuPage, "|", marginLeft);
chrome.extension.sendRequest({dropMenu : msg});
alert('After send');
}
问题是这个页面上的sendRequest是不可能的......有人有想法吗?
提前致谢。
答案 0 :(得分:4)
你最后需要结束</script>
......
答案 1 :(得分:0)
我认为它只是你的脚本雄鹿没有关闭
var b= $('body');
var injectJs = $('<script type=text/javascript> $(document).click(function() {alert("yes");});</script>');
b.append(injectJs);
答案 2 :(得分:0)
使用eval函数,例如:
var body = $('body');
var injectJs = eval("$(document).click(function() {alert('hello')})");
body.append(injectJs);
答案 3 :(得分:0)
// Importation of jQuery.js
var scriptImport = document.createElement('script');
scriptImport.type = 'text/javascript';
scriptImport.src= chrome.extension.getURL('js/jquery.js');
head.appendChild(scriptImport);
// Injection of onClick script
var script = document.createElement('script');
script.type = 'text/javascript';
script.innerHTML =
"document.addEventListener('click', function()" +
"{ if(document.getElementById('dropMenu')) {" +
"$('#dropMenu').slideUp(800, function() {" +
"$(this).remove();" +
"});" +
"}});";
我终于做到了,它有效:)
答案 4 :(得分:0)
为什么不为此使用内容脚本?只有在需要从页面访问js变量时,才需要将脚本直接注入页面。对于dropMenu()
,内容脚本就足够了。
您无法在注入的js中使用Chrome API。您还需要注入内容脚本,并使用自定义DOM事件,您可以从注入的脚本与它进行通信。然后,此内容脚本将能够调用Chrome API并与后台页面进行通信。对我来说听起来很痛苦。我建议你只有在没有其他方法的情况下才能走这条路。