chrome.extension.getBackgroundPage在iframe的扩展页面中未定义

时间:2015-06-01 10:26:32

标签: javascript google-chrome google-chrome-extension

我正在尝试使用chrome.extension.getBackgroundPage功能访问我的分机的后台页面。

但是,我收到以下错误:

  

未捕获的TypeError:chrome.extension.getBackgroundPage不是函数

我从我的bar.js文件中调用该函数,该文件在web_accessible_resource

中定义为manifest.json

如何让它发挥作用?

的manifest.json

{
  "manifest_version": 2,
  "name": "XPath Helper",
  "version": "1.0.13",
  "description": "Extract, edit, and evaluate XPath queries with ease.",
  "background": {
    "page": "background.html"
  },
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "css": ["content.css"],
      "js": ["content.js"]
    }
  ],
  "permissions": ["http://*/", "tabs", "identity", "identity.email"],
  "icons": {
    "32": "static/icon32.png",
    "48": "static/icon48.png",
    "128": "static/icon128.png"
  },
  "web_accessible_resources": [
    "bar.css",
    "bar.html",
    "bar.js"
  ]
}

bar.js bar.html内的脚本(不是内容脚本):

// ...

document.addEventListener('DOMContentLoaded',function(){
  // previosuly chrome.extension.getBackgroundPage()
  chrome.runtime.getBackgroundPage(function(page){
    alert("hello");
  })  
})

content.js

// ...

  this.barFrame_ = document.createElement('iframe');
  this.barFrame_.src = chrome.extension.getURL('bar.html');

  document.body.appendChild(this.barFrame_);

// ...

1 个答案:

答案 0 :(得分:6)

如果页面在扩展程序中运行,则大多数扩展程序API只能 ,即顶级框架是非sandboxed chrome-extension:页面。

chrome-extension: - 非扩展程序中的框架只能访问content scripts和网页可用的扩展程序API。与内容脚本不同,它们还可以在扩展程序的原点使用Web平台API。例如,如果在内容脚本中使用localStorage,则访问运行内容脚本的页面的DOM存储。如果您在localStorage页面中使用chrome-extension:,那么您将获得扩展程序的存储空间。

如果要访问框架中背景页面的功能,请使用extension messaging APIs在框架和背景页面之间进行通信。