0

基本的に、youtube.comにある場合は、現在のタブのURLを取得しようとしています。スクリプトからエラーが発生し続けます。

Error:

Uncaught TypeError: Cannot call method 'getSelected' of undefined

マニフェスト

{
    "name": "YouTube Fix",
    "version": "0.0.1",
    "manifest_version": 2,
    "description": "Fix some of the annoying little things in YouTube.",
    "icons": {
        "16": "icon.png",
        "48": "icon.png",
        "128": "icon.png"
    },
    "content_scripts": [{
        "matches": ["http://www.youtube.com/*"],
        "js": ["background.js"],
        "run_at": "document_start"
    }],
    "permissions": ["tabs"]
}

Background.js

//this is what is giving me the error:
chrome.tabs.getSelected(null, function (tab) {
    myFunction(tab.url);
});

function myFunction(tablink) {
    if (tablink == "http://www.youtube.com") {
        window.location = "http://www.youtube.com/feed/subscriptions/u";
    }
    document.getElementById("comments-textarea").disabled = false;
}
4

4 に答える 4

2

chrome.tabs.getSelected(null, function (tab) {})あなたのページは常に実行されるため、次のフォークは問題ありません"matches": ["http://www.youtube.com/*"],

さらに、この条件をコードに追加しますif(document.getElementById("comments-textarea") != null){

background.js の作業

 if (window.location == "http://www.youtube.com") {
        window.location = "http://www.youtube.com/feed/subscriptions/u";
    }
    if (document.getElementById("comments-textarea") != null) {
        document.getElementById("comments-textarea").disabled = false;
    }

マニフェスト.json

{
    "name": "YouTube Fix",
    "version": "0.0.1",
    "manifest_version": 2,
    "description": "Fix some of the annoying little things in YouTube.",

    "content_scripts": [{
        "matches": ["http://www.youtube.com/*"],
        "js": ["background.js"],
        "run_at": "document_start"
    }],
    "permissions": ["tabs"]
}

さらに情報が必要な場合はお知らせください。

于 2012-12-09T23:57:40.953 に答える
1

背景やイベント ページではなく、コンテンツ スクリプトとして background.js を実行しています。https://developer.chrome.com/extensions/content_scripts.htmlには、「コンテンツ スクリプトにはいくつかの制限があります。それらはできません… chrome を使用することはできません。 * API (chrome.extension の一部を除く)"

代わりに、次のようなものを配置する必要があります

"background": {
  "scripts": ["background.js"],
  "persistent": false
},

あなたのマニフェストに。詳細については、 https://developer.chrome.com/extensions/event_pages.htmlを参照してください。

于 2012-12-09T23:25:17.220 に答える
0

chrome.tabs.getSelected非推奨ですchrome.tabs.query代わりに使用してください:

chrome.tabs.query({
    "active": true
}, function(tab){
    console.log(tab[0]);  //selected tab
});

また、コンテンツ スクリプトはAPI にアクセスできません。 chrome.tabsこれを行う:

chrome.extension.getBackgroundPage().chrome.tabs.query(...

(これは動作しない可能性があります。テストされていません。)

于 2012-12-09T23:24:47.627 に答える
0

ここから引用: https://groups.google.com/a/chromium.org/forum/?fromgroups=#!topic/chromium-extensions/A5bMuwCfBkQ

chrome.tabs.getSelected() は非推奨です。次のページでは、代わりに chrome.tabs.query を使用する方法について説明しています。 http://code.google.com/chrome/extensions/whats_new.html#16関連するテキストは次のとおりです。 () は廃止されました。指定したウィンドウのすべてのタブの詳細を取得するには、引数 {'windowId': windowID} を指定して chrome.tabs.query() を使用します。指定したウィンドウで選択されているタブを取得するには、chrome を使用します引数 {'active': true} を持つ .tabs.query()。 """

于 2012-12-09T22:51:50.153 に答える