chrome object or chrome.tabs object not accessible from script other than a background script [duplicate]

纵然是瞬间 提交于 2019-12-12 03:18:21

问题


I am experimenting with the chrome extensions API and I ran into a problem which I don't understand,

I have a background script "background.js" and a content script "content_script.js".

background.js

chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript({code:"console.log('background script')"});
    chrome.tabs.executeScript({file:"javascript/content_script.js"});
});

content script

chrome.tabs.executeScript({code:"console.log('content_script')"});

The console.log in the background script works perfectly, but in the one in content_script, I get an error --> "Cannot read property 'executeScript' of undefined"

This means that I am not able to access chrome object, or the chrome.tabs object from the content script. Why is this so ?


回答1:


Content scripts run in the context of a web page and not the extension.

Content scripts do not have access to all Chrome APIs. According to official documentation:

Content scripts are JavaScript files that run in the context of web pages. By using the standard Document Object Model (DOM), they can read details of the web pages the browser visits, or make changes to them.

Here are some examples of what content scripts can do:

  • Find unlinked URLs in web pages and convert them into hyperlinks
  • Increase the font size to make text more legible
  • Find and process microformat data in the DOM

Background Script is a single long-running script to manage some task or state. While background scripts have access to all Chrome APIs.

If you want to pass information between content scripts and background script use: Chrome Message Passing



来源:https://stackoverflow.com/questions/32398709/chrome-object-or-chrome-tabs-object-not-accessible-from-script-other-than-a-back

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!