javascript - 谷歌浏览器扩展程序 : Cannot launch Print dialog

标签 javascript google-chrome google-chrome-extension

我想在我的 google chrome 扩展程序中单击按钮时启动打印对话框。当扩展程序的 html 文件作为独立文件打开时,代码似乎可以工作,但当它作为扩展程序加载时,代码就不行了。

HTML: <input id="print_page" type="button" value="Print" onclick="print_p()" />

JavaScript:function print_p(){ window.print();}

知道出了什么问题吗?

最佳答案

除了我提到的重复的内联 JavaScript 问题之外,似乎从弹出窗口(或背景页面)调用打印对话框是不可能的

解决方法是在扩展程序中添加一个“打印助手”页面,该页面在普通选项卡中打开并可以打开打印对话框。

可能的架构:

  1. 单击弹出窗口时,要打印的数据将发送到后台页面:

    function printClick(){
      chrome.runtime.sendMessage({ print: true, data: whateverYouWantToPrint });
    }
    

    它通过后台页面路由,因此您不必担心弹出窗口关闭。

  2. 在后台页面中,打开一个帮助页面:

    var printData;
    
    chrome.runtime.onMessage.addListener( function(request, sender, sendResponse){
      if(request.print) {
        printData = request.data;
        chrome.tabs.create(
          { url: chrome.runtime.getURL("print.html") }
        );
      }
      // ...
    });
    
  3. 在打印帮助程序页面中,脚本 print.js 请求数据,根据需要对其进行格式化并调用打印对话框:

    chrome.runtime.sendMessage({ getPrintData: true }, function(response){
      formatDataIntoPage(response.data);
      window.print();
    });
    
  4. 返回后台页面,根据打印助手的请求提供数据:

    chrome.runtime.onMessage.addListener( function(request, sender, sendResponse){
      // ...
      if(request.getPrintData) {
        sendResponse({ data: printData });
      }
    });
    

关于javascript - 谷歌浏览器扩展程序 : Cannot launch Print dialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24190553/

相关文章:

javascript - 如何使用 jquery 获取图像大小(Chrome、Safari...)

javascript - Chrome 扩展,Jquery ajax 失败

javascript - 将文件系统位置解析为可用文件 ://urls in chrome

javascript - 尝试访问 <c :set variable in javascript

javascript - 如何找到调用函数的位置(函数调用堆栈)

javascript - 基于 React 中的 Promise 呈现元素(Firebase 存储)

css - 当 CSS 规则在 Chrome 的元素检查器中显示为灰色时,这意味着什么?

javascript - chrome.pageAction.show() 在 tabs.onCreated 监听器中不起作用

javascript - 在 javascript 中使用分割并丢弃后面的字符

javascript - 如何使 .replace(/./g, '_' ) 处理空格异常(exception)情况?