Google chrome Chrome扩展:从background.html发送提交

Google chrome Chrome扩展:从background.html发送提交,google-chrome,google-chrome-extension,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"

我正在进行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> 

它只在重新启动或安装后工作一次

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

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

如果要向web服务器发送POST请求,则应使用
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");

更多详细信息。

如果要向web服务器发送POST请求,应使用
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");

更多细节。

我在开发chrome扩展时遇到了同样的问题。我的背景页面有一个表单,目标为空。它只会打开新窗口一次,但如果我尝试再次提交它,它会悄悄地什么也不做。我不知道为什么会发生这种情况,但这是我的解决方案

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,但如果您需要香草JavaScript,只需在需要时替换为“document.getElementById('myForm')”)

我在开发chrome扩展时遇到了同样的问题。我的背景页面有一个表单,目标为空。它只会打开新窗口一次,但如果我尝试再次提交它,它会悄悄地什么也不做。我不知道为什么会发生这种情况,但这是我的解决方案

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,但如果您需要香草JavaScript,只需在需要时替换为“document.getElementById('myForm')”)

您希望它什么时候工作?我试图提交background.html中的表单,然后创建chrome.contextMenus.create({“title”:“test”,“parentId”:parentId,“context”:[“selection”],“onclick”:SubmitFunction});SubmitFunction(){document.forms[“test”].submit();}它只在重新启动后或安装后工作一次基本上我想从后台向服务器发送post请求。htmlWhen's you't expected?我试图提交background.html中的表单,然后创建chrome.contextMenus.create({“title”:“test”,“parentId”:parentId,“context”:[“selection”],”onclick“:SubmitFunction});SubmitFunction(){document.forms[“test”].submit();}它只在重新启动或安装后工作一次基本上我想从后台向服务器发送post请求。HTMLANK您的帮助我将查看更多内容脚本。background.html有一些我看到的内容。在后台页面中包含表单可能无效。您可能想查看一下。谢谢您的帮助,我将更多地查看内容脚本。background.html中有一些我看到的内容。在后台页面中包含表单可能无效。您可能想查看一下。谢谢。看起来是我需要的。有没有办法在$.post或XMLHttpRequest中在新选项卡中打开类似target=“\u blank”的内容“对于表单。@user766182我不这么认为。这里有一个和你们描述的类似的问题,看起来是Chrome中的一个bug(没有解决方案):谢谢你们。看起来是我需要的。在$.post或XMLHttpRequest中是否有任何方法可以在新选项卡中打开类似target=“\u blank”的表单。@user766182我不这么认为。这里有一个类似于您所描述的问题,看起来像是Chrome中的一个bug(没有解决方案):