tabs.saveAsPDF()不起作用(Firefox Web-ext)

时间:2017-10-04 11:58:37

标签: javascript firefox firefox-webextensions

所以,昨天我得到了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文件会保存到我的桌面。控制台看起来像这样:

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页面。所以我不明白我在这里错过了什么?!

1 个答案:

答案 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)。