在firefox扩展中提交表单数据

时间:2018-02-10 12:05:56

标签: javascript form-submit firefox-webextensions

我在将表单提交设置为在Firefox扩展程序中运行时遇到问题。 这是我的代码的相关部分:

function downloadfile(Fname,content) {  
form = '<form action="'+_currhost+'/cgi/returnasfile.php" method="post" autocomplete="no">'
    +'      <input type="text" id="fname" name="fname">'
    +'      <textarea id="content" name="content" ></textarea>'
    +'      <button type="submit" id="submit" name="submit"></button>'
    +'  </form>'
$('#dldiv').html(form);
$('#fname').val(Fname);
$('#content').val(content);
$('#submit').click();
$('#dldiv').html('');
}

它应该只返回内容和文件名以从浏览器打开下载窗口。 php脚本只返回带有足够标题的内容:

$content = (array_key_exists('content', $_POST)) ? $_POST['content'] : '';
$fname = (array_key_exists('fname', $_POST)) ? $_POST['fname'] : '';

header('Content-type: text/plain');
header('Content-Disposition: attachment; filename="'.$fname.'"');

echo $content;

但它只打开一个包含此内容的窗口:  screenshot

enter image description here

当我直接在我的服务器上的标准网页中使用此扩展页直接执行此操作时,它运行良好。同样在Chrome中,它可以作为扩展和标准页面完美运行。 清单中是否有必要的特殊权限?我启用了那些:

    "permissions": [
   "activeTab",
   "contextMenus",
    "storage",
    "http://*/",
    "https://*/",
    "file://*/*"
        ],

我的firefox版本在debian sid上是58.0.1(64位)

之前已经提出过类似的问题。但我没有找到任何方法如何在扩展中解决这个问题。它正在&#34;正常&#34;我的模式。

谢谢和问候

曼弗雷德

1 个答案:

答案 0 :(得分:0)

只是为了分享我的新代码,因为我解决了POST数据的问题。也许它与这个错误有关: Can't submit form to an http(s) URL using POST method from WebExtensions

现在是我的解决方法(在firefox原生页面和webextension以及Chrome原生页面和webextension中测试)

function downloadfile(filename,content) {   
if (typeof browser !== 'undefined'){
    browser.downloads.download({
         url: URL.createObjectURL(new Blob([ content ])),
         filename: filename,
         saveAs: true,
        })

} else{
        form = '<form id="dlfrm" name="dlfrm" action="'+_currhost+'/cgi/returnasfile.php" method="post" autocomplete="no">'
        +'      <input type="text" id="fname" name="fname">'
        +'      <textarea id="content" name="content" ></textarea>'
        +'      <button type="button" id="btsubmit" name="btsubmit"></button>'
        +'  </form>'
        $('#dldiv').html(form);
        $('#fname').val(filename);
        $('#content').val(content);
        $('#btsubmit').on('click',function(){
            $('#dlfrm').submit();
        })
        $('#btsubmit').click();
        $('#dldiv').html('');
}

}