【问题标题】:Crossrider external js file not loading :PDFJS is not definedCrossrider 外部 js 文件未加载:PDFJS 未定义
【发布时间】:2016-11-08 13:35:42
【问题描述】:

以下是我在 extension.js 中的代码。如果您查看代码,我尝试了不同的方法将文件加载到我的扩展中。无论如何,我总是得到 ​​p>

VM3051:15 Uncaught ReferenceError: PDFJS is not defined

尝试将文件放在不同的位置。

appAPI.ready(function($) {
  console.log("pdf min js loading");
  appAPI.resources.includeJS('jspdf.js');
 // appAPI.resources.includeJS('js/jspdf.js');
// appAPI.resources.includeRemoteJS('//cdnjs.cloudflare.com/ajax/libs/jspdf/1.2.61/jspdf.min.js');
 //$.globalEval(appAPI.resources.get('//cdnjs.cloudflare.com/ajax/libs/jspdf/1.2.61/jspdf.min.js'));
 console.log("done");
    setTimeout(function(){
        alert(window.location.href);
    if(window.location.href.indexOf(".pdf") > -1) {
        console.log("its a pdf");

        alert("pdf");
        var doc = new jsPDF();

    }else{
    alert($.trim($('div').find('h1,h2,h3,h4,h5,p,span').text()));
    }

    },6000);
});

这是文件结构

我无法修改 manifest.json,因为扩展名对于所有浏览器都应该是唯一的,而不仅仅是 chrome。

【问题讨论】:

  • 注意:window.location.href.indexOf(".pdf") > -1 不可靠。使用 window.location.href.endsWith(".pdf") 之类的东西。
  • @gcampbell 是的......当然。我会尽快更新它。现在只是测试。
  • @sᴜʀᴇsʜᴀᴛᴛᴀ,我猜你的意思是jspdf.min.js,你能不能也提供manifest.json
  • @HibaraAi 是的。刚刚添加了我的清单。并且还尝试将它放在扩展的 lib 文件夹中并在清单中给出路径。还是一样的错误。
  • 文件结构截图几乎没有用,因为它不完整并且包含额外的路径,如Resources,在发布的代码中没有使用。 Settings.json 中还有一个大写字母,因此请确保文件名完全相同或只是始终使用小写。

标签: javascript jquery google-chrome-extension browser-extension crossrider


【解决方案1】:

我很困惑,您代码中的两个 CloudFlare URL 引用了项目 jsPDF。我会假设本地的pdf.js 也会这样做。

在您的代码中,您正在使用

PDFJS.getDocument();

此语法来自PDF.js,这是一个与 Mozilla 完全不同的项目。

如果你坚持使用jsPDF,你的代码应该是这样的:

var doc = new jsPDF();
doc.text(20, 20, 'Hello world.');
doc.save('Test.pdf');

或者您需要为PDF.js 包含正确的库。

在您进行编辑和 cmets 之后,您似乎已完全切换到 jsPDF,但您仍然遇到同样的错误,其中明确提到了 PDF.js

您确定您正在调试仅使用jsPDF 的应用程序的正确和最新版本吗?

我在Crossrider 上设置了一个小型复制示例,仅使用jsPDF

extension.js 代码如下:

appAPI.ready(function($) {
  console.log("pdf min js loading");

  appAPI.resources.includeJS('jspdf.js');

  console.log("done");

  var doc = new jsPDF();

  console.log(doc);
});

在调试扩展时,我得到了这个结果:

doc 是一个包含jsPDF 实例的对象,我以后可以使用它。

无论如何都不应提及PDF.js。我唯一的猜测可能是您正在运行/调试您的扩展版本仍然包含对该项目的引用。

【讨论】:

  • 稍作修改。希望清除。我只是在使用 jsPdf 并尝试使用不同的加载方式。当我在内容脚本中使用它时,它正在工作。但它质疑 Mozilla 和 intenet explorer 的支持。
  • 那么现在的错误是什么,我假设自从您切换到 jsPDF 后您不再收到 Uncaught ReferenceError: PDFJS is not defined 了?
  • 我遇到了同样的错误。问题是它没有通过 jquery getScript 或 eval 或 inline 等加载。它只能通过内容脚本工作
  • 我已经编辑了我的答案,添加了一个工作示例,没有错误地提到 PDF.js,并疯狂猜测为什么你会在不使用它的情况下获得对这个项目的引用。
  • 谢谢伙计。你让它成为可能。我尝试了许多其他方法,但都失败了。如果我没记错的话,我也尝试过这种方式:) 但是重新开始可能会清除这些东西。再次感谢。
猜你喜欢
  • 2018-08-02
  • 2017-03-29
  • 2017-12-28
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
相关资源
最近更新 更多