2016-05-10 8 views
0

私のFirefoxをマイグレーションしようとしましたaddon WebExtensionに低レベルのSDK APIを使用し、ある時点で新しいタブにURLエンコードされたPOSTデータを送りたいと思います。低レベルAPIでタブを開き、FirefoxのウェブエクステンションでPOSTリクエストを行います

それは、次のコードによって可能です:

const querystring = require('sdk/querystring'); 
let stringStream = Cc["@mozilla.org/io/string-input-stream;1"].createInstance(Ci.nsIStringInputStream); 
stringStream.data = querystring.stringify(params); // params is a json data 

let postData = Cc["@mozilla.org/network/mime-input-stream;1"].createInstance(Ci.nsIMIMEInputStream); 
postData.addHeader("Content-Type", "application/x-www-form-urlencoded"); 
postData.addContentLength = true; 
postData.setData(stringStream); 

var tabBrowser = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator).getMostRecentWindow("navigator:browser").gBrowser; 
var selectedTabIndex = tabBrowser.tabContainer.selectedIndex; 
var newTab = tabBrowser.loadOneTab("https://myurl.com/", { 
    inBackground: false, 
    postData: postData 
}); 
tabBrowser.moveTabTo(newTab, selectedTabIndex + 1); 

しかし、私はWebExtension同等物を発見していません。

フォームを作成してjsで送信することは可能ですか、それとも唯一の解決策ですか?

答えて

0

今のところ唯一の解決策は、新しいタブでフォームを作成して送信することです。バックグラウンドスクリプトで :

// tab creation 
browser.tabs.create({ index: tab.index + 1, url: "https://myurl.com/" }, function (tab) { 
    // load content script submitForm.js 
    browser.tabs.executeScript(tab.id, { file: "submitForm.js" }, function() { 
     // send message to submitForl.js with parameters 
     chrome.tabs.sendMessage(tab.id, {url: tab.url, message: 'hello world'}); 
    }); 
}); 

submitForm内容:

function submitForm(request, sender, sendResponse) 
{ 
    var f = document.createElement('form'); 
    f.setAttribute('method','post'); 
    f.setAttribute('action','https://myurl.com/form'); 

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

    var f2 = document.createElement('input'); 
    f2.setAttribute('type','hidden'); 
    f2.setAttribute('name','content'); 
    f2.setAttribute('value', request.message); 
    f.appendChild(f2); 

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

// listen for messages and execute submitForm 
chrome.runtime.onMessage.addListener(submitForm); 
1

実際にタブに投稿するか、レスポンスを表示するだけですか?これは投稿し、あなたが何かをすることができる応答を得るでしょう。 CORSヘッダーが正しく設定されていることを確認してください。

+0

良いアイデアが、私は私が所有していないウェブサイトへ(HTMLフォームのような)URLエンコードされたデータをポストする必要があり、だから、結果を表示するのではなく、タブにPOSTする方が好きです。今、私はjavascriptを使ってHTMLフォームを生成しています。例えば、コードを投稿します。 –

+1

私はあなたがちょうどxhr.send( "lorem = ipsum&name = binny")を変更できると思います。あなたのパラメータを含める。 http://www.openjs.com/articles/ajax_xmlhttp_using_post.php –

+0

別の例:https://blog.mozilla.org/addons/2016/05/31/using-google-analytics-in-extensions/ –

関連する問題