2016-05-28 12 views
0

私はYouTubeビデオであなたの場所を覚えている拡張機能を書き、自動的に後で再開します。これらの2行は、YouTubeの動画ページに貼り付けても問題なく動作します。DOM機能はコンソールでは動作しますが、拡張機能ではなく、ロード待ちです

var player = document.getElementById("movie_player"); 
player.getDuration(); 

ただし、Chrome拡張機能には含まれていません。ビデオのロード非同期の可能性を考慮するために、私はページ全体がロードされている間に5秒のタイムアウトを設定しました。この拡張機能は、同時にコンソール上で動作している場合でも、2行目にエラーをスローし続けます。

TypeError例外:のdocument.getElementById(...)getDuration関数でない(...)

を介してアクセスするとき機能がプレイヤーに存在しない何らかの理由のでタイプが「未定義」として示されています。拡張子。

+0

クイックテストとしての遅延を長くしてください。インターバルタイマーを使用して要素を継続的にチェックし、見つかったときにタイマーをクリアすることができました – charlietfl

+0

関数呼び出しは、5秒ごとに呼び出されるタイムドループにあります。私は数分間それを走らせて、同じ結果を得ました。だから私はすでにそれをやっているが、それは動作していない.. – Shane

答えて

0

マニフェストファイルには、activeTab権限が必要です。

{ 
    "manifest_version": 2, 
    "name": "Youtube Resume", 
    "description": "This extension resumes a Youtube video where you left it off", 
    "version": "1.0", 
    "content_scripts":[ 
    { 
     "matches": ["*://www.youtube.com/*"], 
     "js": ["inject.js"] 
    } 
    ], 
    "permissions": [ 
    "storage", 
    "activeTab" 
    ] 
} 
+0

私はまだ許可と同じエラーが発生します。 – Shane

+1

@Shane youtubeを見ると、 'movie_player'要素はdivなので、' getDuration() 'メソッドは含まれません。 'document.getElementsByClassName(" ytp-time-current ")[0] .innerHTML'を使って実際の時刻を取得できるように解析してください。 編集:それは "0:07"のようなものを返すので、私はそれを解析するので、それからリアルタイムを取得する関数を作成する必要があります。 – StrangeOne101

+0

@ StrangeOne101あなたは間違っていますが、divであればすべての機能を持っています(ブラウザのコンソールで呼び出してみてください): 'ytplayer = document.getElementById(" movie_player ");

​…​
ytplayer.getCurrentTime(); 3358.412652' – user924

関連する問題