Google chrome - extension chrome idle not working

烂漫一生 提交于 2019-12-08 14:24:11

问题


Getting ERROR: Uncaught TypeError: Cannot read property 'queryState' of undefined

how can i run the extension (https://developer.chrome.com/apps/idle ) from my code?

manifest.json:

{
  "name" : "Idle - Simple Example",
  "version" : "1.0.1",
  "description" : "Demonstrates the Idle API",
  "background" : {
    "scripts": ["background.js"]
  },
  "permissions" : [ "idle" ],
  "browser_action" : {
    "default_icon" : "sample-19.png"
  },
  "icons" : {
    "16" : "sample-16.png",
    "48" : "sample-48.png",
    "128" : "sample-128.png"
  },
  "manifest_version": 2
}

background.js:

var history_log = [];
chrome.idle.onStateChanged.addListener(function(newstate) {
  var time = new Date();
  if (history_log.length >= 20) {
    history_log.pop();
  }
  history_log.unshift({'state':newstate, 'time':time});
});
chrome.browserAction.onClicked.addListener(function() {
  window.open('history.html', 'testwindow', 'width=700,height=600');
});

FAIL: in my code to get the chrome.idle.queryState, http://localhost/index.html:

<html>
<script>
document.addEventListener('DOMContentLoaded', function() {
  chrome.idle.queryState(5, function(state) {
    var time = new Date();
    alert("extension: " + state);
  });

});
</script>
</html>

EDIT:

it only works when i use as chrome-extension:// but does not work if i try to use it from http:// or https://. My goal is to make it work from http:// or https:// (or iFrame opening chrome-extension invisibly if possible?)


回答1:


Having an extension open a website does not magically grant the site rights to use Chrome Extension API.

  1. Simplest is to have index.html as part of the extension's files. Then you can use the API, but take note of the Chrome's CSP (you can't use inline scripts).

  2. If your goal is specifically to provide a web page access to the Chrome API, the webpage will need to talk to the extension.

    There are many methods for that, for example "externally_connectable", or talking via a context script and shared DOM.

In any case: chrome.idle can only be called from extension's own pages, including but not limited to the background page.

Also, please use chrome.windows.create or chrome.tabs.create instead of window.open in an extension. It doesn't require special permissions.



来源:https://stackoverflow.com/questions/35173027/google-chrome-extension-chrome-idle-not-working

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