2017-10-04 57 views
1

因此,昨天我得到了Firefox 56(Ubuntu Gnome),並開始嘗試使用tabs.saveAsPDF()函數(Firefox 56+)。所以他們在site上顯示的例子是用於後臺腳本。但是我想只在按下按鈕時觸發它。所以我做了一個按鈕,並在.js文件(一個彈出窗口)中編寫了這個代碼。tabs.saveAsPDF()不工作(Firefox Web-ext)

var savepdf = document.querySelector('.savePDF'); 
savepdf.addEventListener('click', saveaspdf); 

function saveaspdf(){ 
console.log('Inside saveaspdf'); //for checking 
browser.tabs.saveAsPDF({footerCenter:"hello",footerLeft:"2",footerRight:"4/10/2017",headerCenter:"Mera Baba",headerLeft:"Baba",headerRight:"Baba",marginBottom:0.5,marginLeft:0.5,marginRight:0.5,marginTop:0.5,orientation:0,paperHeight:11.0,paperSizeUnit:0,paperWidth:8.5,scaling:1,showBackgroundColors:false,showBackgroundImages:false,shrinkToFit:true}) 
    .then((status) => { 
     console.log(status); 
    }); 
} 

當我點擊按鈕,將其保存爲PDF的窗口出現(比如我選擇桌面),然後我點擊保存。沒有任何反應(下載插件也不會變成藍色),並且損壞的pdf文件保存到我的桌面。控制檯看起來是這樣的:

result

所以,它會在函數內部後來(我沒有太多的想法)「無法發送函數調用的結果......」發生。請幫我解決這個問題。

這是我manifest.json文件:

"permissions": [ 
     "storage", 
     "<all_urls>", 
     "tabs", 
     "activeTab" 
    ], 

    "browser_action": { 
     "default_icon": "icons/pdf.ico", 
     "default_title": "My pdf", 
     "default_popup": "popup/addsite.html" 
    } 

編輯: -

我做了一個非常簡單的擴展僅由background.js文件,並從this站點複製代碼。儘管如此,功能似乎工作的唯一頁面是Firefox的about:debugging頁面。所以我不明白我在這裏錯過了什麼?!

+0

請將[問題]置於主題上:包括一個[重複出現問題*的[mcve]]。對於Chrome擴展程序或Firefox Web擴展程序,幾乎總是需要包含* manifest.json *和一些背景,內容和/或彈出腳本/ HTML以及常用的網頁HTML /腳本。尋求調試幫助的問題(「爲什麼我的代碼不按我想要的方式工作?」)必須包括:(1)期望的行爲,(2)特定問題或錯誤,以及(3)重現它所需的最短代碼*在問題本身*。請參閱:[我可以在這裏詢問什麼主題?](/ help/on-topic)和[問]。 – Makyen

+0

@Makyen抱歉沒有這樣做。但是,正如你所看到的,上面的代碼('popup腳本')不起作用。請查看答案和此後的討論。答案是「等待'Mozilla'做些什麼」。但是如果它讓帖子更好,我仍然會發布'manifest.json' :)。關於「背景腳本」,主要目的是不使用它。 – Miraj50

回答

1

browser.tabs.saveAsPDF只能在後臺腳本中使用。您需要在內容腳本和後臺腳本之間進行消息傳遞。

所以contentscript.js:

var savepdf = document.querySelector('.savePDF'); 
savepdf.addEventListener('click', saveaspdf); 

function saveaspdf(){ 
    console.log('Inside saveaspdf'); //for checking 
    browser.runtime.sendMessage("saveCurrentPageAsUrl"); 
} 

background.js:

browser.runtime.onMessage.addListener(onMessage); 

function onMessage(message) { 
    if(message == "saveCurrentPageAsUrl"){ 
    saveCurrentPageAsUrl(); 
    } 
} 

function saveCurrentPageAsUrl(){ 
    browser.tabs.saveAsPDF({footerCenter:"hello",footerLeft:"2",footerRight:"4/10/2017",headerCenter:"Mera Baba",headerLeft:"Baba",headerRight:"Baba",marginBottom:0.5,marginLeft:0.5,marginRight:0.5,marginTop:0.5,orientation:0,paperHeight:11.0,paperSizeUnit:0,paperWidth:8.5,scaling:1,showBackgroundColors:false,showBackgroundImages:false,shrinkToFit:true}) 
     .then((status) => { 
      console.log(status); 
     }); 
    } 

} 

https://bugzilla.mozilla.org/show_bug.cgi?id=1404681)影響的Firefox 57和Firefox 58是目前防止大多數頁面被保存爲PDF中的bug,因此應該使用getBrowserInfo(https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/runtime/getBrowserInfo)在不支持的情況下向用戶顯示通知(https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/notifications),從而在插件中內置檢查。

+0

我在這裏略有不同意你的評價;由OP提供的代碼肯定不是_content script_,因爲'browser.tabs'只是未定義的。據推測,雖然需要澄清,但它是一個彈出窗口。也就是說,你的方法是有效的。 – Xan

+0

@Xan抱歉不清楚,是的,這是一個彈出窗口。 – Miraj50

+0

順便說一句,不知道它是否會起作用,但我把代碼放在popup腳本中而不是contentscipt.js中,並且像你這樣做了後臺腳本。記錄在控制檯中的狀態顯示爲「保存」,但我仍然得到一個損壞的PDF文件(ubuntu試圖用文本編輯器打開它,認爲它是文本/純文本)(也沒有下載插件的變化)。 – Miraj50