フォーム オブジェクトをページに動的に挿入すると、フォームを送信して削除すると正常に動作します。
フォーム コードの例を次に示します。
<form target="_blank" enctype="multipart/form-data"
action="https://www.example.com/" method="POST">
<input value="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" name="image_content" type="hidden">
<input value="" name="filename" type="hidden">
<input value="" name="image_url" type="hidden">
</form>
で同じプロセスを実行しようとするとloadOneTab()
、結果POST
はまったく同じではないため、結果は上記と同じではありません。
ヘッダーを確認すると、「一部の値」が完全に送信されず (切り取られて)、 が設定されますContent-Length: 0
。
私は何かが欠けているに違いない。
let postStream = Components.classes['@mozilla.org/network/mime-input-stream;1']
.createInstance(Components.interfaces.nsIMIMEInputStream);
postStream.addHeader('Content-Type', 'multipart/form-data');
postStream.addHeader('filename', '');
postStream.addHeader('image_url', '');
postStream.addHeader('image_content', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==');
postStream.addContentLength = true;
window.gBrowser.loadOneTab('https://www.example.com/',
{inBackground: false, postData: postStream});
注: image_content の値は 'data:image/png;base64' です。データ URI の
NoScript はフォームと XSS の送信で問題を引き起こしますloadOneTab
。inBackground