2011-08-04 94 views
1

我写的谷歌浏览器用户脚本会自动打开一个特定的聊天标签,但它不工作,为什么这个用户脚本不能在Facebook上工作?

我认为,这是因为Chat.openTab没有特别的限定,因为当我在JavaScript运行代码控制台它工作正常。

CODE:

var face = "facebook.com" 
var domain = document.domain 
if (domain = face) 
{ 
Chat.openTab("sam.sebastian1", "Seb") 
} 
+2

比较是'==',而不是'=' – zerkms

回答

2

其他的答案指出它应该是(domain == face),而这个的错误。

但是,这并不妨碍脚本看起来像预期的那样工作。

主要问题是Chrome用户脚本不能使用目标页面中定义的JS。你必须注入代码到网页中,像这样:

function functionToInject() { 
    function myCode() { 
     /*--- This is where you put everything you want to do that 
      requires use of the page's javascript. 
     */ 
     var face = "facebook.com" 
     var domain = document.domain 
     if (domain == face) 
     { 
      Chat.openTab ("sam.sebastian1", "Seb"); 
     } 
    } 
    myCode(); 
} 

function addJS_Node (text, s_URL) { 
    var scriptNode      = document.createElement ('script'); 
    scriptNode.type      = "text/javascript"; 
    if (text) scriptNode.textContent = text; 
    if (s_URL) scriptNode.src   = s_URL; 

    var targ = document.getElementsByTagName('head')[0] 
       || document.body || document.documentElement; 
    targ.appendChild (scriptNode); 
} 

addJS_Node ('(' + functionToInject.toString() + ')()'); 


这是基本的答案。 但是,因为这是Facebook,事情有点复杂。

  1. Facebook加载了很多iFrames,并且脚本会在很多iFrame上触发。
  2. Chat对象不会立即加载。

为了解决这些障碍,我们设置了一个计时器,它不会尝试执行我们的代码,直到找到资源。

像这样:在JS

function functionToInject() { 
    function myCode() { 
     /*--- This is where you put everything you want to do that 
      requires use of the page's javascript. 
     */ 
     var face = "facebook.com" 
     var domain = document.domain 
     if (domain == face) 
     { 
      Chat.openTab ("sam.sebastian1", "Seb"); 
     } 
    } 

    var waitForKeyElements = setInterval (checkForElement, 500); 

    function checkForElement() { 
     if (typeof Chat != "undefined") { 
      clearInterval (waitForKeyElements); 
      myCode(); 
     } 
    } 
} 

function addJS_Node (text, s_URL) { 
    var scriptNode      = document.createElement ('script'); 
    scriptNode.type      = "text/javascript"; 
    if (text) scriptNode.textContent = text; 
    if (s_URL) scriptNode.src   = s_URL; 

    var targ = document.getElementsByTagName('head')[0] 
       || document.body || document.documentElement; 
    targ.appendChild (scriptNode); 
} 

addJS_Node ('(' + functionToInject.toString() + ')()'); 
+0

这听起来很愚蠢,但是我该如何更改该代码如果有的话? – Icallitvera

+0

这不是愚蠢的,因为你在Facebook上使用这个,有真实的因素来考虑... iFrames和JS功能可能无法立即提供的事实。让我创建一个Facebook帐户(¤groan¤),看看这里是否有任何网站特定的陷阱。 ...回到几个... –

+0

JavaScript控制台给出了有关<><!的语法错误! – Icallitvera

3
if (domain = face) 

应该

if (domain === face) 
+1

谢谢指点先生,但是当Facebook被加载JavaScript控制台还提供了以下错误信息:遗漏的类型错误:不能设置属性'值'为空 未捕获的引用错误:未定义聊天 未捕获的类型错误:无法设置为空的属性'值' 未捕获的引用错误:未定义聊天 – Icallitvera

1
if (domain == face) 
{ 
Chat.openTab("sam.sebastian1", "Seb") 
} 

if (domain = face) 
{ 
Chat.openTab("sam.sebastian1", "Seb") 
} 
相关问题