Chrome扩展程序:从background.html发送提交

时间:2011-05-23 14:45:52

标签: google-chrome google-chrome-extension

我正在进行Chrome扩展,并且在从background.html提交时遇到问题

例如,这有效:

var url="some url";

chrome.tabs.create({"url":url, selected:true});

但如果我试着这样做:

document.forms["test"].submit();

只安装扩展程序或重启后它只能运行一次

更新

我正在尝试提交此表格,该表格位于background.html:

<FORM action="some url" name="test" id = "test" method="post" target="_blank" > 
    <input type="hidden" id="test" name="test" value="12" /> 
    <input type="hidden" id="addr" name="addr" value="" /> 
</form> 

然后我创建菜单

chrome.contextMenus.create({"title": "test", "parentId": parentID, "contexts":["selection"], "onclick": SubmitFunction}); 

SubmitFunction(){ 
    document.forms["test"].submit();
} 

重启后或安装后只能运行一次

3 个答案:

答案 0 :(得分:1)

background.html存在于扩展上下文中,无法直接更改页面b / c页面存在于自己的页面上下文中。在您的情况下,当您调用submit()时,background.html没有任何特定页面/选项卡的上下文。因此,您可能需要使用content script,然后通过message passing与其进行通信。

答案 1 :(得分:0)

如果要将POST请求发送到Web服务器,则应使用XMLHttpRequest。如果您了解jQuery或任何其他框架,它们通常会为此提供方便的包装器:

$.post("some_url", { test: "...", addr: "..." }); //jQuery

如果没有,那么您可以直接使用XMLHttpRequest

var xhr = new XMLHttpRequest();
xhr.onreadystatechange=function() {
    if (xhr.readyState==4 && xhr.status==200) {
        console.log("done");
    }
}
xhr.open("POST","some_url",true);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send("test=TEST_VALUE&addr=ADDRESS_VALUE");

更多详情here

答案 2 :(得分:0)

我在开发Chrome扩展程序时遇到了同样的问题。我的背景页面有一个带有_blank目标的表单。它只会打开一次新窗口,但如果我再次尝试提交它,它就会悄然无所作为。我不知道为什么会这样,但这是我的解决方案。

function randomString(){
    return ((Math.PI * Math.max(0.01, Math.random())).toString(36).substr(2, 5));
} 

function submitMyForm(){
   ... //do whatever form preparations here
   var rn = randomString();
   $('#myForm')[0].target = rn;
   window.open('', rn);
   $('#myForm').submit();
}

基本上我将目标更改为随机名称,之后它才有效。为什么?我不知道,也许其他人可以肯定这一点,但他的作品对我而言。

(我也使用JQuery,但是如果你需要vanilla JavaScript,只需要在需要的地方替换“document.getElementById('myForm')”