我正在进行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();
}
重启后或安装后只能运行一次
答案 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')”