2011-03-07 38 views
0

我目前正在嘗試使用jQuery在網頁上動態插入JS塊,但它不起作用。我嘗試這樣做:從動態插入的js調用Chrome.extension.sendRequest?

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
// 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

您需要關閉</script>底有...

+0

它沒有改變任何東西... – Sindar 2011-03-07 11:26:14

0

我認爲它只是你的腳本雄鹿沒有關閉

var b= $('body'); 

var injectJs = $('<script type=text/javascript> $(document).click(function() {alert("yes");});</script>'); 

b.append(injectJs); 
0

使用eval函數,例如:

var body = $('body'); 
var injectJs = eval("$(document).click(function() {alert('hello')})"); 
body.append(injectJs); 
0

爲什麼不爲此使用內容腳本?只有當您需要從頁面訪問js變量時,才需要將腳本直接注入頁面。對於您的dropMenu(),內容腳本應該足夠了。

您無法在注入的js內使用Chrome API。您還需要注入一個內容腳本,並使用自定義DOM事件,您可以從注入的腳本與它進行通信。然後,此內容腳本將能夠調用Chrome API並與後臺頁面進行通信。聽起來對我來說很痛苦。我建議你只有在沒有其他方式可行的情況下才能走這條路。