0

自分用に拡張用のブラウザを構築しようとしています。アイデアは、プラグインのアイコンをクリックすると、ページが開くということです。その新しいページの読み込みが完了した後にいくつかのコードを実行したいのですが、どういうわけかうまくいきません。

var result;

chrome.browserAction.onClicked.addListener(function() {
    chrome.history.search(
        { text: "", maxResults: 100}, //object
        function(results) { //callback
            for(var item in results) {
                var currItem = results[item];
                if (currItem.url.indexOf("some_domain") > -1) {
                    result = results[item];
                    break;
                }
            }

            //Go to website
            chrome.tabs.create({
                'url': result.url
            }, function(tab) {
                new_tabId = tab.id;
            });
        }
    );
});

ここで失敗する部分があります:

chrome.webNavigation.onCompleted.addListener(function(details) {
   // if (check for correct URL here) {
        var videos = document.getElementsByTagName("video");
        var video = videos[0];
        alert(videos.length); <--- always Zero! Why??
        video.load();
        video.play();

        video.addEventListener("ended", function() { ... });
   // }
});

どちらも同じバックグラウンド スクリプトにあり、コンテンツ スクリプトはありません。マニフェストのアクセス許可は次のとおりです。"tabs", "history", "webNavigation"

開発者コンソールで確認して document.getElementsByTagName("video").length実行すると、正しい番号が得られます。

4

1 に答える 1

1

wOxxOmで暗示されているように、コードの動作を妨げているのは、バックグラウンド スクリプトから DOM にアクセスしようとしている場合です。具体的には、コード:

var videos = document.getElementsByTagName("video");
var video = videos[0];
alert(videos.length); <--- always Zero! Why??
video.load();
video.play();

video.addEventListener("ended", function() { ... });

バックグラウンド スクリプトでは機能しません。これを行うには、コンテンツ スクリプトをロード/実行する必要があります。

于 2016-08-12T16:00:13.600 に答える