2016-12-01 9 views
5

Tworzę rozszerzenie Google Chrome, które polega na poznaniu aktualnej godziny odtwarzania wideo na ' youtube.com ". Wiem, co do zasady, że document.getElementById('movie_player').getCurrentTime() powinien wrócić, ale powołując się to w skrypcie zawartości wtryskiwanego do strony produkuje:Pobierz aktualny czas Youtube Video na youtube.com (np. Document.getElementById ('movie_player'). GetCurrentTime())

Uncaught TypeError: document.getElementById('movie_player').getCurrentTime is not a function(…)

jestem w stanie uruchomić komendę w konsoli Chrome i uzyskać właściwą wartość.

Zanim to zostanie oznaczone jako zduplikowane pytanie, chcę zaznaczyć, że mówię o tym na "youtube.com". Nie wiem, czy powinienem oczekiwać specjalnego zachowania, ale jest to zdecydowanie inny kontekst niż inne pytania, które znalazłem na stackoverflow.

Aby pomóc, poniżej znajduje się najprostszy kod, jaki wymyślę, aby odtworzyć ten problem. Aby to zadziałało, musisz load this as an unpacked extension. Następnie przejdź do dowolnego filmu z youtube. Kliknij ikonę rozszerzenia i kliknij przycisk "Rozpocznij test". Upewnij się również, że masz otwartą konsolę (F12).

Z góry dziękuję za sugestie, jak sprawić, aby ta metoda zadziałała, lub w inny sposób, w jaki sposób mogę uzyskać potrzebne informacje (np. Przyjrzałem się uzyskaniu udziału w czasie wartości, ale nie mogłem wymyślić tego). W ostateczności rozważam zastąpienie odtwarzacza youtube moim własnym iframe i próbowanie w ten sposób.

popup.html

<!doctype html> 
<html> 
    <head> 
    <title>Getting Started Extension's Popup</title> 
    <script src='popup.js'></script> 

    </head> 
    <body> 
    <input type='button' id='start' value='Start The Test'></input> 
    <p id="messages"></p> 
    <p id="result"></p> 
    </body> 

</html> 

popup.js

// Add listener for start button 
document.addEventListener('DOMContentLoaded', function() { 
    document.getElementById("start").addEventListener('click', process_video); 
}); 


function process_video() { 
    chrome.tabs.executeScript(null, {file: 'test.js'}); 
} 

test.js

player = document.getElementById('movie_player'); 
console.log(player); 
console.log(player.getCurrentTime()); // ERROR IN QUESTION IS PRODUCED WITH THIS COMMAND 

manifest.json

{ 
    "manifest_version": 2, 

    "name": "It's a placeholder", 
    "description": "This is only a test", 
    "version": "1.0", 

    "browser_action": { 
    "default_popup": "popup.html", 
    "default_title": "My Test" 
    }, 

    "permissions": [ 
    "activeTab", 
    "http://localhost/*", 
    "https://www.youtube.com/*" 
    ] 

} 
+0

Próbowałaś właściwość CurrentTime? Zobacz http://www.w3schools.com/TAGs/av_prop_currenttime.asp –

+0

Wydaje się działać w moim skrypcie testowym! Opublikuję wstępną odpowiedź. Dzięki wielkie! – austinmilt

Odpowiedz

3

Podziękowania dla Charliego Dalsassa (patrz komentarze poniżej mojego pytania), myślę, że mam odpowiedź!

test.js

video = document.getElementsByClassName('video-stream')[0]; 
console.log(video); 
console.log(video.currentTime);