2013-04-05 78 views
0

我有一個contextMenu項目,它向我的網站上的PHP腳本發送一個Ajax請求。如何在桌面通知窗口中創建下載鏈接?

PHP腳本創建一個.txt文件並再次將下載URL返回給該擴展。

在下一步中,顯示一個Desktop Notification,在那裏我想放置下載鏈接,以便用戶可以下載創建的文件。

問題是我不能在那裏使用HTML。我不想用createHTMLNotification它被廢棄了,所以我的代碼是:

var url = 'http://mydomain.com/somefile.txt'; 

var notification = window.webkitNotifications.createNotification(
    '48.png', 'Click to download', 'Some description'); 

notification.addEventListener('click', function() { // can't create <a> tag, so I'm tring with a click event. 
    notification.cancel(); 
    window.open(url); 
}); 

notification.show(); 

這(window.open())會在新的選項卡中的文件。但我只想下載它,而不用在瀏覽器中打開。

任何想法?

+1

見http://stackoverflow.com/a/13810026/1841048 – 2013-04-05 12:48:20

+0

謝謝!這種方法存在問題。一個文件(甚至不同的文件)只是第一次下載。之後,直到您重新加載擴展程序後才能正常工作。但是你的評論讓我朝着正確的方向發展,並且找到了我想要的東西。這裏是:http://developer.chrome.com/extensions/downloads.html – enenen 2013-04-05 18:47:37

回答

0

我發現了一個解決方案,因爲沒有任何答案,我會寫它。

對於從給定的URL下載一個文件,你可以使用downloads API's download method

function forceDownload(url) { 
    var filename = url.replace(/^.*\/|\.[^.]*$/g, ''); // get basename 

    chrome.downloads.download(
     {url: url, saveAs: true}, // options array 
     function(id) { 
      // callback function 
     } 
    ); 
}; 

在我的情況forceDownload()方法是所謂的Ajax' done方法:

function exportEntries(info, tab) { 
    var user = 'blah blah'; 

    $.ajax({ 
     url: 'http://domain.com/export.php', 
     method: 'POST', 
     data: { topic: tab.url, user: user } 
    }).done(function (url) { 
     forceDownload(url); 
    }); 
}