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 に答える