所以,昨天我得到了Firefox 56(Ubuntu Gnome),我开始尝试使用tabs.saveAsPDF()功能(Firefox 56+)。所以在site上他们展示的示例是用于后台脚本。但我只想在按下按钮时触发它。所以我做了一个按钮,并在.js
文件(弹出窗口)中编写了这段代码。
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文件会保存到我的桌面。控制台看起来像这样:
所以,它进入函数内部但后来(我没有太多想法)"无法发送函数调用结果......"发生。请帮我解决这个问题。
这是我的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 :(得分: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);
});
}
}
影响Firefox 57和Firefox 58的错误(https://bugzilla.mozilla.org/show_bug.cgi?id=1404681)目前阻止将大多数页面保存为PDF,因此应使用getBrowserInfo(https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/runtime/getBrowserInfo)将插件内置到插件中以显示在不受支持的情况下通知用户(https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/notifications)。