2016-03-21 1 views
2

Firefox 45.0.1を使用してプログラムでFirefox WebExtensionにファイルを作成してダウンロードするChrome拡張機能を移植しようとしています。Firefox WebExtensionを使用してファイルに作成されたファイルをプログラムでダウンロードするにはどうすればよいですか?

これは、Javascriptのコードです:

text = '{"greeting":"Hello, World!"}'; 
    var a = document.createElement('a'); 
    var file = new Blob([text], {type: 'text/json'}); 
    a.href = URL.createObjectURL(file); 
    a.download = 'hello.world'; // Filename 
    a.click();     // Trigger download 

すべての行は(私はa.click()console.log()を置く)罰金を実行するように見えるが、ないファイルがダウンロードされません。

現在のところ、Firefox WebExtensionsにchrome.downloads APIはありません。

上記のコードにFirefoxとの互換性はありますか? Firefox WebExtensionを使用してプログラムでファイルをダウンロードする方法はありますか?

+0

Firefoxには 'chrome.downloads' APIがありますが、残念ながらこのバグのために' blob: '-URLのダウンロードをサポートしていません:https://bugzil.la/1287347 –

答えて

0

これを行う1つの方法は、イベントリスナーをaタグに追加することです。私はchrome.downloadsがサポートされているかどうかを確認するために、そのようdownloadVidWithChromeApi機能を使用

text = '{"greeting":"Hello, World!"}'; 
var a = document.createElement('a'); 
var file = new Blob([text], {type: 'text/json'}); 
a.href = URL.createObjectURL(file); 
a.download = 'hello.world'; // Filename 
a.addEventListener('click', dlLinkClicked); 


function dlLinkClicked(e){ 
    var link = e.currentTarget.href; 
    var filename = e.currentTarget.download; 

    /*downloadVidWithChromeApi downloads using the chrome download API, 
    otherwise returns false and starts downloading the file 
    using the html5 download - you don't have to do anything else*/ 

    if(downloadVidWithChromeApi(link, filename)){ 
     e.preventDefault(); 
    } 
} 

function downloadVidWithChromeApi(link, fileName){ 
    if(chrome.downloads && chrome.downloads.download){ 
     chrome.downloads.download({ 
      url: link, 
      saveAs: false, 
      filename: fileName // Optional 
     }); 
     return true; 
    }else{ 
     return false; 
    } 
} 

注意してください。

したがって、このコードは、firefox、chrome、AND opera web extensions AS ISの両方で実行できます。

+0

このコードは、自動的にダウンロードします。また、 'a.addEventListener( 'click'、dlLinkClicked);'行の後に 'a.click()'を使って試しました。私はWindows上でFirefox 45.0.1を使用しています(一般ユーザー用の最新リリース)。これは同じFirefoxですか? – Pep

+0

または、マニフェストに行方不明のパーミッションがありますか?私のFirefox WebExtensionの場合、私は 'tabs'パーミッションしか持っていませんが、これはとにかくこのコードと無関係です。私が知る限りでは、 'chrome.downloads' APIはFirefox 47まではFirefoxにはないので、Firefox 45で' download'パーミッションが利用できるとは思われません。 – Pep

+0

これは私のアクセス許可です。 \t \t "タブ"、 \t \t "*:// */*"、 \t \t "ダウンロード" \t]、 ''あなたはdownloads'許可を追加し、おそらく場合はa.click 'にできるようになります(); 'それをトリガーする? – SudoPlz

関連する問題