无法访问内容脚本对象方法

时间:2014-04-10 21:10:01

标签: javascript google-chrome-extension content-script

目标:    使用内容脚本“Youtube.js”

中定义的Youtube对象显示页面信息

问题:    无法访问会员。

我有以下脚本,该脚本也在contents_scripts下的manifest.cs中注册:

/// <reference path="UtilityFunctions.js" />
var playerElementId = "movie_player";
var youtube = new Youtube();

writePageInfo(youtube);

function Youtube() //ctor
{ 
   this.playerObj = getPlayer();
} 

Youtube.prototype.IsCurrentSite = function ()
{
  var url = location.href;

  if (url.indexOf("youtube.com") > 0)
  {
    return playerObj != null;
  }

  return false;
}

function getPlayer()
{
   return document.getElementById(playerElementId);
}

//debug
function writePageInfo(youtubeObj)
{
   //alert("From Youtube content script"); //this line is executed
   alert("Youtube - debug: " + youtubeObj.IsCurrentSite()); //this line NOT: undefined function
}

我不知道如何编写未注释的警报消息。

P.S .:   如果我打开几个Youtube页面,会创建几个对象吗?

1 个答案:

答案 0 :(得分:1)

我不知道你在做什么,但错误的原因是你正在创建和使用Youtube构造函数的实例,然后你正在为它的原型添加一个方法。将IsCurrentSite对象传递给youtube函数时,此新方法(即writePageInfo)不存在。

要解决此问题,您需要调用writePageInfo(youtube) AFTER 将方法添加到原型中:

var youtube = new Youtube();
Youtube.prototype.IsCurrentSite = function ()
{
  var url = location.href;

  if (url.indexOf("youtube.com") > 0)
  {
    return playerObj != null;
  }

  return false;
}

writePageInfo(youtube); //moved here

回答您的问题,每个浏览器标签(或窗口)都有自己的JavaScript环境。