2014-04-03 86 views
4

我正在使用Javascript編寫Chrome擴展程序,並且希望獲取當前在youtube.com上播放視頻的時間。我嘗試使用回答問題Getting Current YouTube Video Time,例如:YouTube視頻的getCurrentTime()

ytplayer = document.getElementById("movie_player");

ytplayer.getCurrentTime();

但是我得到以下錯誤:「遺漏的類型錯誤:無法讀取屬性空的‘getCurrentTime’」;

我做錯了什麼?我嘗試了不同的ElementId值 - movie_player,player ....

任何幫助表示讚賞。提前致謝。

乾杯。

編輯:

這裏是我的清單:

{ 
    "manifest_version": 2, 

    "name": "", 
    "description": "", 
    "version": "1.0", 

    "browser_action": { 
    "default_icon": "icon.png", 
    "default_popup": "basic.html" 
    }, 
    "permissions": [ 
    "tabs", 
    "activeTab", "http://*/*", "https://*/*" 
    ] 
} 

的另一件事是: 如果我執行此代碼:

ytplayer = document.getElementById("movie_player"); 

ytplayer.getCurrentTime(); 

在上一YouTube頁面的JavaScript控制檯它的工作原理罰款並返回當前時間。 但是,如果我從擴展或擴展的控制檯執行此值,則第一行返回值爲null。

因此,正如本文假設,下面的問題似乎是我的擴展程序甚至不訪問Youtube頁面。

任何幫助表示讚賞,所以在此先感謝。

乾杯

+0

您可以顯示清單並說明該代碼行的位置? – Xan

+0

我發現這個有用的帖子。 http://stackoverflow.com/questions/37494344/dom-function-works-in-console-but-not-in-extension-despite-waiting-for-it-to-lo – pcpetepete

+0

這個答案爲我解決了這個問題:https://stackoverflow.com/a/40903459/4896841 – Taknok

回答

0

由於本假設正確,你在你的背景頁面的背景下,這是錯誤的執行代碼。

要與其他頁面交互,需要在其中注入內容腳本。請參閱here的概述。您可能需要了解Messaging的工作原理,以便您可以收集內容腳本中的數據並將其傳送到後臺頁面。

爲了讓小例子,你可以有一個文件inject.js

ytplayer = document.getElementById("movie_player"); 
ytplayer.getCurrentTime(); 

而在你的後臺頁面的腳本,你可以注入到這一點如下當前頁面(點擊按鈕時,例如)

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript({ 
    file: 'inject.js' 
    }); 
}); 

然後,您會在當前打開的頁面的控制檯中看到執行的結果。要報告結果,您需要使用chrome.runtime.sendMessage

+1

嗨。遇到同樣的問題,你的解決方案也沒有幫助。 –

+3

我嘗試在我的background.js中注入一個腳本,仍然告訴我'ytplayer.getCurrentTime不是一個函數' –

0

你只能使用時的getElementById引用找你到正確的頁面。你正在使用正確的ID。如果找你試圖訪問的發揮形成另一個頁面,您可以使用jQuery的​​功能

--------- ----------編輯

樣品中他們這樣做,像這樣: function getCurrentTime() { var currentTime = player.getCurrentTime(); return roundNumber(currentTime, 3); }

+0

我正在激活我的插件Youtube頁面。它是目前唯一一個在我的瀏覽器中打開的程序,僅用於測試。 – JustARegularUser