Javascript tabs.saveAsPDF()不工作(Firefox Web ext)
所以,昨天我买了Firefox56(UbuntuGNOME),我开始尝试功能(Firefox56+)。因此,在这个例子中,他们展示的是一个背景脚本。但我只想在按下按钮时触发它。因此,我制作了一个按钮,并在Javascript tabs.saveAsPDF()不工作(Firefox Web ext),javascript,firefox,firefox-addon-webextensions,Javascript,Firefox,Firefox Addon Webextensions,所以,昨天我买了Firefox56(UbuntuGNOME),我开始尝试功能(Firefox56+)。因此,在这个例子中,他们展示的是一个背景脚本。但我只想在按下按钮时触发它。因此,我制作了一个按钮,并在.js文件(弹出窗口)中编写了此代码 当我点击该按钮时,将出现保存为pdf的窗口(假设我选择桌面),然后我点击保存。什么也没发生(下载插件也不会变成蓝色),一个损坏的pdf文件被保存到我的桌面上。控制台如下所示: 所以,它进入函数内部,但是(我不太清楚)“无法发送函数调用结果…”发生了。请帮我
.js
文件(弹出窗口)中编写了此代码
当我点击该按钮时,将出现保存为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"
}
“权限”:[
“存储”,
“站点。那么该功能似乎唯一起作用的页面就是Firefox的关于:调试页面。所以我不明白我在这里遗漏了什么?!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的bug()正在阻止大多数页面保存为PDF,因此应使用getBrowserInfo()在插件中内置一个检查,以便在不支持时向用户显示通知().我稍微不同意您的评估;OP提供的代码肯定不是作为浏览器的内容脚本。选项卡
将只是未定义的。可能,尽管需要澄清,但它是一个弹出窗口。也就是说,您的方法是有效的。顺便说一句,我不确定它是否有效,但我将代码放在弹出窗口脚本中,而不是内容中tscipt.js并按照您所做的方式制作了背景脚本。控制台中登录的状态显示为“已保存”,但我仍然收到一个损坏的PDF文件(ubuntu尝试使用文本编辑器打开它,认为它是文本/普通的)(下载插件也没有更改).如果有人在下面找到了,我发现了。这里的人说它在Firefox 56中有效,但在更高版本中无效。我不知道现在该怎么办?:(@Miraj使用Firefox 56开发插件,用于显示警告()向用户介绍受影响版本中的bug 1404681。当57或58发布时,该问题可能会得到修复。您还可以在内容脚本中用作解决方法:)请回答以下问题:包括一个与问题重复的问题。对于Chrome extensions或Firefox WebExtensions,您几乎总是需要包含manifest.json和一些背景、内容和/或弹出脚本/HTML,通常还有网页HTML/脚本。问题寻求调试帮助(“为什么我的代码没有按我想要的方式工作?”?)必须包括:(1)所需的行为,(2)一个特定的问题或错误,(3)在问题本身中重现它所需的最短代码。另请参阅:,和。@Makyen抱歉没有这样做。但正如您所看到的,上面是代码(属于弹出脚本
)这是行不通的。请看答案和之后的讨论。答案是“等待Mozilla
做点什么”。但我还是会发布清单。json
如果它能让文章更好:)。关于背景脚本
,主要目的是不使用它。
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);
});
}
}