注入脚本错误:脚本在 Firefox 扩展上返回了非结构化可克隆数据

Tam*_* Vo 5 javascript firefox-addon firefox-addon-webextensions

我想将脚本从 firefox web 扩展注入到 tabId 思想 browser.tabs.executeScript API。

我有一个文件 Browser.js

MyFunc.Browser = (function() {
  var self;

  function Browser() {
    self = this;
  }

  Browser.getExtensionURI = function() {
    return "chrome-extension://";
  };

  return Browser;

})();
Run Code Online (Sandbox Code Playgroud)

并执行脚本函数:

var executing = browser.tabs.executeScript(tabId, {
            file: "js/contentscripts/Browser.js"
          });
 executing.then(function(results) {
    console.log("url: " + tabUrl + ", result", results);

 }, function(error) {
    return console.log("Inject scripts error: " + error);
 });
Run Code Online (Sandbox Code Playgroud)

但是脚本无法注入到选项卡并显示错误。

我该如何解决?

清单文件:

{
  "name": "abc",

  "background": {
    "page": "background.html"
  },
  "browser_action": {
    "default_icon": "icons/icon_19.png",
    "default_popup": "login.html",
  },
  "content_scripts": [
    {
      "web_accessible_resources": [


        "js/contentscripts/Browser.js",

      ],
      "js": [
        "js/contentscripts/ContentScript.js"
      ],
      "matches": [
        "file://*/*",
        "http://*/*",
        "https://*/*"
      ],
      "run_at": "document_end",
      "all_frames": true
    },
    {
      "js": [

        "js/contentscripts/Browser.js",
      ],
      "matches": [
        "file://*/*",
        "http://*/*",
        "https://*/*"
      ],
      "run_at": "document_start",
      "all_frames": true
    }
  ],
  "icons": {
    "16": "icons/icon_16.png",
    "19": "icons/icon_19.png"
  },
  "incognito": "spanning",
  "permissions": [
    "activeTab",
    "tabs",
    "http://*/*",
    "https://*/*",
    "<all_urls>"
  ],
  "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
  "version": "1.1.16"
}
Run Code Online (Sandbox Code Playgroud)

For*_*vin 3

我想我现在明白你的问题了。

您的executeScript 的返回数据必须是可克隆的结构化数据。
为了被认为是结构化克隆,数据必须匹配以下数据类型之一:

  • 所有原始类型 - 但不是符号
  • 布尔对象
  • 字符串对象
  • 日期
  • RegExp - 不保留lastIndex 字段。
  • 斑点
  • 文件
  • 文件列表
  • 数组缓冲区
  • ArrayBufferView - 这基本上意味着所有类型数组,如 Int32Array 等。
  • 图像数据
  • 大批
  • 对象 - 这仅包括普通对象(例如来自对象文字)
  • 地图

https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#Supported_types

在您的情况下,问题是您返回的对象在其属性中具有函数。因此它是非结构化可克隆的,这解释了您的错误。