Расширение Chrome: отправка отправки из background.html - PullRequest
1 голос
/ 23 мая 2011

Я делаю расширение 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 ]

1 голос
/ 23 мая 2011

background.html существует в контексте расширения и не может напрямую изменять страницы, поскольку страницы существуют в их собственном контексте страницы. В вашем случае background.html не имеет контекста для какой-либо конкретной страницы / вкладки, когда вы вызываете submit (). Таким образом, вам, вероятно, потребуется использовать скрипт содержимого и затем связаться с ним через передачу сообщений .

0 голосов
/ 08 июня 2013

У меня была такая же проблема при разработке моего расширения 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, но если вам нужен ванильный JavaScript, просто замените его на «document.getElementById ('myForm')», где это необходимо)

0 голосов
/ 23 мая 2011

Если вы хотите отправить 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");

Подробнее здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...