从动态插入的js调用Chrome.extension.sendRequest?

时间:2011-03-07 11:13:29

标签: javascript jquery google-chrome google-chrome-extension

我目前正在尝试使用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是不可能的......有人有想法吗?

提前致谢。

5 个答案:

答案 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并与后台页面进行通信。对我来说听起来很痛苦。我建议你只有在没有其他方法的情况下才能走这条路。