为什么chrome.tables.executeScript方法的回调结果总是返回一个空对象?

oug3syen  于 2023-04-27  发布在  Go
关注(0)|答案(2)|浏览(151)

我最近发现了chrome扩展的开发,并被runtime.excuteScript方法卡住了,第三个参数中的回调系统地返回给我一个空对象...
为了简洁起见,我将省略我所有的manifest.json(v2):
manifest权限:

"permissions": [
    "storage",
    "cookies",
    "tabs",
    "background",
    "activeTab",
    "<all_urls>",
    "*://*/*"
  ]

manifest content-script:

"content_scripts": [
    {
      "matches": ["<all_urls>"],
      "run_at": "document_end",
      "js": ["js/content-script.js"]
    }
  ]

我的目标是将localStorage的内容发送到我的扩展。
pop-up.js:

chrome.tabs.executeScript(
  null, 
  { file: "js/content-script.js" },
  (result) => {
    if(result) console.log( "🔥 Result of content-script:",result ) 
    else console.log("🤯 No content-script, no result")
  }
);

content-script.js:

localStorage;

▼ * 扩展控制台输出:*

🔥 Result of content-script: Array(1)
   ▶︎ 0: {} 
   length:1
   ▶︎ __proto__: Array(0)

请给我解释一下这个错误,让这个晚上过得很愉快!谢谢!

kxeu7u2r

kxeu7u2r1#

我从来没有找到解决方案。但我通过以下方法发送数据来解决这个问题:
▼ content-script.js:

chrome.runtime.sendMessage({'localStorage' : localStorage});

▼ pop-up.js:

chrome.runtime.onMessage.addListener((message) => {message.localStorage});
ttp71kqs

ttp71kqs2#

对我来说,这是因为我在func中返回了一个不可序列化的对象。
必须返回String或int之类的简单值。问题是不会抛出异常,它会默默地删除结果

相关问题