0

我正在尝试使用 last.fm 和 plug.dj API 制作一个 chrome 扩展,它曾经可以工作,直到我开始将我的脚本嵌入到扩展中,然后我无法连接到它们。这是设置脚本:

function Setup(){
    console.log('Setup');
    API.addEventListener(API.DJ_ADVANCE, callback);
    cache = new LastFMCache();
    lastfm = new LastFM({
        apiKey: '<key>',
        apiSecret: '<secret>',
        cache: cache
    });
}

在我的 manifest.json 中有以下内容

{
   "content_scripts": [ {
      "js": [ "jquery.js","lastfm.api.md5.js", "lastfm.api.cache.js", "lastfm.api.js","lastFMLink.js", "script.js"],
      "css": [ "LastFMLink.css" ],
      "matches": [ "http://plug.dj/*", "http://plug.dj/*/*" ],
      "run_at": "document_end"
   } ],

   "name": "Plug.Dj VS last.Fm",
   "description": "Implement information about the artist",
   "icons": { "16": "cookie.png", "48": "cookie.png", "128": "cookie.png" },
   "permissions": [ "http://plug.dj/*", "http://plug.dj/*/*" ],
   "version": "0.0.1",
   "web_accessible_resources": [ "lastFMLink.js"],
   "manifest_version": 2
}

它在新的 LastFMCache() 和脚本中我访问其他 API 的其他地方出错。其他脚本被加载(如 lastFMLink.js 和 lastFMLink.css),奇怪的是事件监听器确实工作

按下按钮时会加载设置脚本并且尚未初始化,因此通常不会因脚本顺序出错。

有人知道可能出了什么问题吗?

4

1 回答 1

0

这可能不是最好的选择,但我发现它不起作用的原因是 content_script 在后台运行,并且无法访问彼此。

所以我将 manifest.json 更改为:

{
   "content_scripts": [ {
      "js": ["script.js"],
      "css": [ "LastFMLink.css" ],
      "matches": [ "http://plug.dj/*", "http://plug.dj/*/*" ],
      "run_at": "document_end"
   } ],

   "name": "Plug.Dj VS last.Fm",
   "description": "Implement information about the artist",
   "icons": { "16": "cookie.png", "48": "cookie.png", "128": "cookie.png" },
   "permissions": [ "http://plug.dj/*", "http://plug.dj/*/*" ],
   "version": "0.0.1",
   "web_accessible_resources": [ "jquery.js","lastfm.api.md5.js", "lastfm.api.cache.js", "lastfm.api.js","lastFMLink.js","script.js"],
   "manifest_version": 2
}

然后我只需要加载脚本,我确信这不是这样做的方法,但它现在可以工作,但这就是我现在加载我的 last.fm 脚本的方式(在 script.js 中):

var s = document.createElement('script');
s.src = chrome.extension.getURL("lastFMLink.js");
var s2 = document.createElement('script');
s2.src = chrome.extension.getURL("lastfm.api.md5.js");
var s3 = document.createElement('script');
s3.src = chrome.extension.getURL("lastfm.api.cache.js");
var s4 = document.createElement('script');
s4.src = chrome.extension.getURL("lastfm.api.js");

s.onload = function() {
    this.parentNode.removeChild(this);
};
(document.head||document.documentElement).appendChild(s);
(document.head||document.documentElement).appendChild(s2);
(document.head||document.documentElement).appendChild(s3);
(document.head||document.documentElement).appendChild(s4);
于 2013-02-26T16:49:26.037 回答