2012-01-29 70 views
2

我是'chrome扩展开发'的新人,我想做一个扩展。
当用户点击弹出页面上的按钮时,该扩展必须在网页中注入代码。我看到了不同的主题,但似乎无法注入与网页现有代码“交互”的代码。例如:当用户打开一个网页时,会创建一个名为test的变量,我想获取该变量并将其用于我的代码中(例如:alert(test);)。我尝试了几种方法来实现这一点,但它不会奏效。我怎样才能做到这一点?我尝试过:Chrome扩展中的JavaScript注入

chrome.tabs.executeScript(null,{code:"alert('test')"}); 
console.log("alert('test');"); 

这个工作,但只适用于弹出页面,所以变量'测试'不存在。

+0

http://stackoverflow.com/questions/8363639/using- a-pages-functions-in-chrome-extension – c69 2012-01-29 15:23:58

回答

1

你的看法非常真实。 Chrome扩展程序代码无法直接与现有网页的代码互动 - 它们运行在不同的,僻静的环境中。 但是,他们共享的是DOM结构和(HTML5)localStorage,因此您可以使用其中一种将消息传递给彼此。通过定义DOM更改的监听器。

2

谢谢,它的工作,现在,这里是我的代码:

弹出窗口:

function makeRequest(act){ 
chrome.tabs.getSelected(null, function(tab) { 
    chrome.tabs.sendRequest(tab.id, {action: act, tabid: tab.id}, function(response) { }); 
});} 
//inputs: 
<input type="button" id="addDiv" value="Add Div" onClick="makeRequest(this.id);" /> 
<input type="button" id="addButton" value="Add button" onClick="makeRequest(this.id);" /> 

contentScript:

function injectCode(text) { 
    var script = document.createElement("script"); 
    var parent = document.documentElement; 
    script.text = text; 
    script.setAttribute("id", "codeInjection"); 
    script.setAttribute("extension", "Chrome"); 
    parent.appendChild(script); 
    parent.removeChild(script); 
} 
var codes = Array(); 
codes["addDiv"] = "alert('Add a div');"; 
codes["addButton"] = "alert('Add a button');"; 
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
    switch (request.action) { 
     case "addDiv": 
      injectCode(codes["addDiv"]); 
      break; 
     case "addButton": 
      injectCode(codes["addButton"]); 
    } 
}); 
+0

伟大的你,做得好! – ronme 2012-01-31 18:20:12

+1

谢谢,最终它不是那么难:)但你如何到达那里更难! – user1176420 2012-01-31 20:16:16