Javascript tabs.saveAsPDF()不工作(Firefox Web ext)

Javascript tabs.saveAsPDF()不工作(Firefox Web ext),javascript,firefox,firefox-addon-webextensions,Javascript,Firefox,Firefox Addon Webextensions,所以,昨天我买了Firefox56(UbuntuGNOME),我开始尝试功能(Firefox56+)。因此,在这个例子中,他们展示的是一个背景脚本。但我只想在按下按钮时触发它。因此,我制作了一个按钮,并在.js文件(弹出窗口)中编写了此代码 当我点击该按钮时,将出现保存为pdf的窗口(假设我选择桌面),然后我点击保存。什么也没发生(下载插件也不会变成蓝色),一个损坏的pdf文件被保存到我的桌面上。控制台如下所示: 所以,它进入函数内部,但是(我不太清楚)“无法发送函数调用结果…”发生了。请帮我

所以,昨天我买了Firefox56(UbuntuGNOME),我开始尝试功能(Firefox56+)。因此,在这个例子中,他们展示的是一个背景脚本。但我只想在按下按钮时触发它。因此,我制作了一个按钮,并在
.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);
      });
  }

}