2014-04-03 87 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