Переделка POST от Chrome для FF - PullRequest
       10

Переделка POST от Chrome для FF

0 голосов
/ 07 сентября 2018

Сейчас я перерабатываю свое расширение Chrome для FF и не могу выполнить POST.

Для Chrome, где он работает, как и ожидалось, у меня есть background.js, который открывает code.js:

Chrome Background.js :

chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript(tab.id, {file: "code.js"})
});

Chrome Code.js

(function(d){var f=d.createElement('form');f.action='http://gtmetrix.com/analyze.html?bm';f.method='post';var i=d.createElement('input');i.type='hidden';i.name='url';i.value=document.location.href;f.appendChild(i);d.body.appendChild(f);f.submit();})(window.open().document)

Делая это для FF, я пытаюсь сделать следующее:

FF Background.js:

chrome.browserAction.onClicked.addListener(tab => {
    chrome.tabs.create({ url: 'http://gtmetrix.com/analyze.html?bm', function (tab) {
    browser.tabs.executeScript(tab.id, { file: "code.js" },});
    });

FF Code.js

function submitForm(request, sender, sendResponse)
{
    var f = document.createElement('form');
    f.setAttribute('method','post');
    f.setAttribute('action','http://gtmetrix.com/analyze.html?bm');

    var i = document.createElement('input');
    i.setAttribute('type','hidden');
    i.setAttribute('name','url]');
    i.setAttribute('value', request.url);
    f.appendChild(i);

    document.getElementsByTagName('body')[0].appendChild(f);
    f.submit();
}

chrome.runtime.onMessage.addListener(submitForm);

как упоминалось в https://stackoverflow.com/a/37908997/1992004. Но: после щелчка ничего не происходит, и я не получаю ошибок ...

Может ли кто-нибудь указать мне правильное направление? Где ошибка? Почему это не работает?

@ rd3n https://drive.google.com/open?id=1CgAUmGJ8jXE2umSmVPlbExmNYMToXy-Z

manifest.js

{
 "background": {"scripts": ["background.js"]},
 "browser_action": {
 "default_icon": {
      "16": "icon-16.png",
     "48": "icon-48.png",
     "128": "icon-128.png"
 },
 "default_title": "ext"
 },
 "name": "ext",
 "short_name": "ext",
 "description": "ext",
 "homepage_url": "https://example.de/",
 "icons": {
     "16": "icon-16.png",
     "48": "icon-48.png",
     "128": "icon-128.png" },
 "permissions": [
     "tabs",
     "http://*/*",
     "https://*/*"
 ],
 "version": "0.1",
 "manifest_version": 2,
 "developer": { 
 "name": "ext", 
 "url": "https://example.com"},
"content_scripts": [
  {
  "matches": ["http://*/*", "https://*/*"],
    "js": ["submitForm.js"]
  }
] 
}

1 Ответ

0 голосов
/ 08 сентября 2018

Странно, что вы не получаете ошибок с кодом, который вы опубликовали, поскольку FF background.js содержит синтаксические ошибки:

  • Ваш обратный вызов для создания вкладки находится внутри объекта createProperties
  • В качестве последнего аргумента функции executeScript

Ваш код должен быть:

chrome.browserAction.onClicked.addListener(tab => {
    chrome.tabs.create({url: 'http://gtmetrix.com/analyze.html?bm'}, tab => {
        browser.tabs.executeScript(tab.id, {file: 'code.js'});
    });
});

НО Теперь, нажав на значок расширения браузера, вы откроете новую вкладку для http://gtmetrix.com/analyze.html?bm и добавите файл code.js на эту страницу.
Тогда ничего не будет добавлено, как в вашем FF code.js вы регистрируете обработчик сообщений, но никогда не отправляете никаких сообщений.

Из того, что я вижу в вашем коде расширения Chrome, вы не хотите этого делать, верно :-)?

Рабочим решением будет:

background.js

chrome.browserAction.onClicked.addListener(tabToAnalyze => {
    chrome.tabs.create({url: 'about:blank'}, blankTab => {
        browser.tabs.executeScript(blankTab.id, {file: 'code.js', matchAboutBlank: true}, () => {
            chrome.tabs.sendMessage(blankTab.id, {url: tabToAnalyze.url});
        });
    });
});

code.js (без изменений, кроме удаления ] в i.setAttribute('name','url]');):

function submitForm(request, sender, sendResponse) {

    var f = document.createElement('form');
    f.setAttribute('method','post');
    f.setAttribute('action','https://gtmetrix.com/analyze.html?bm');

    var i = document.createElement('input');
    i.setAttribute('type','hidden');
    i.setAttribute('name','url');
    i.setAttribute('value', request.url);
    f.appendChild(i);

    document.getElementsByTagName('body')[0].appendChild(f);
    f.submit();
}

browser.runtime.onMessage.addListener(submitForm);

manifest.json

{
    "name": "gtmetrix Analyzer Test",
    "version": "1.0",
    "description": "gtmetrix Analyzer for FF",
    "manifest_version": 2,
    "permissions": ["tabs"],
    "background": {
        "scripts": ["background.js"]
    },
    "browser_action": {
        "default_icon": {
            "16": "16x16.png",
            "32": "32x32.png"
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...