2011-11-17 50 views
2

我今天开始编写自己的Chrome扩展程序,并且因为一个问题而陷入困境。 现在,我将当前的URL从打开的网站发送到我的服务器,在那里根据一些标准进行检查,然后将返回值发回给扩展。这工作到目前为止。我只使用popup.html,没有背景页面。 该请求仅在用户单击浏览器中的图标时发送。 如何在页面加载时自动发送请求?在页面顶部注入DIV标签并在页面加载时自动启动脚本?

如果服务器有特定的返回值,应该给用户一个unannoying警告。警报框和新窗口很好......很烦人。最好的方式应该是扩展名图标下的小弹出窗口,但如果没有用户的点击,这是不可能的。所以我想到了页面顶部的一个小图层。

<html> 
<head> 

<script> 
window.addEventListener("load", sendRequest, false); 
function sendRequest() { 
var q = "test"; 
xmlHttp=new XMLHttpRequest(); 
xmlHttp.open('GET', 'http://www.testurl.com/check.php?q='+q, true); 
xmlHttp.onreadystatechange = function() { 
    if (xmlHttp.readyState == 4) { 
    document.getElementById("textf").innerText = xmlHttp.responseText; 
    chrome.tabs.executeScript(null,{code:"<div style='position: absolute; top: 0; left: 0; background-color=blue;layer-background-color: blue;'><p>test </p><p>test2 </p></div>"}); 
} 
    } 
xmlHttp.send(null); 
} 
</script> 
</head> 
<body> 
//Just for the popup... 
<font color="blue"><p id="textf">Checking...</p></font> 
</body> 
</html> 

如果我做

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

它给我的警告。然而,这是行不通的,我不知道为什么:(

我是否需要一个背景页面的所有这些,因为我只想检查页面加载时的URL? 为什么东西没有工作,但该警报是什么?

预先感谢您!

回答

0

chrome.tabs.executeScript是Javascript只。将内容添加到网页,您必须编写JavaScript代码操纵DOM。一个好地方让你开始学习这可能是Mozilla's DOM docs(DOM是W3C标准,Chrome已经实现了,所以是的,Mozilla页面在这里是相关的。)

如果我可以这样说,这听起来像是最好的解决方法就是取消这个过程并重新开始清单中定义的内容脚本,以便Chrome为您执行;检查the Content Scripts documentation以了解更多信息。由于您试图在没有后台页面的情况下完成目标,因此需要直接从内容脚本中使用XMLHttpRequest,因此您应该将"minimum_chrome_version": "13"添加到清单中,因为Chrome 12和更早版本不会让您这样做。

顺便说一句,实际上没有人会理解你在说什么,当你使用“层”和“东西”这样的。请在确保使用正确的术语时更加小心。问问你的同龄人,如果你不确定某物的合适名词。

+0

谢谢你的回答。我使用了这里不允许的HTML标签(不知道这一点)...因此,例如在“-layer”之前缺少“div”。 –