我写的谷歌浏览器用户脚本会自动打开一个特定的聊天标签,但它不工作,为什么这个用户脚本不能在Facebook上工作?
我认为,这是因为Chat.openTab
没有特别的限定,因为当我在JavaScript运行代码控制台它工作正常。
CODE:
var face = "facebook.com"
var domain = document.domain
if (domain = face)
{
Chat.openTab("sam.sebastian1", "Seb")
}
我写的谷歌浏览器用户脚本会自动打开一个特定的聊天标签,但它不工作,为什么这个用户脚本不能在Facebook上工作?
我认为,这是因为Chat.openTab
没有特别的限定,因为当我在JavaScript运行代码控制台它工作正常。
CODE:
var face = "facebook.com"
var domain = document.domain
if (domain = face)
{
Chat.openTab("sam.sebastian1", "Seb")
}
其他的答案指出它应该是(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,事情有点复杂。
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() + ')()');
这听起来很愚蠢,但是我该如何更改该代码如果有的话? – Icallitvera
这不是愚蠢的,因为你在Facebook上使用这个,有真实的因素来考虑... iFrames和JS功能可能无法立即提供的事实。让我创建一个Facebook帐户(¤groan¤),看看这里是否有任何网站特定的陷阱。 ...回到几个... –
JavaScript控制台给出了有关<><!的语法错误! – Icallitvera
if (domain = face)
应该
if (domain === face)
谢谢指点先生,但是当Facebook被加载JavaScript控制台还提供了以下错误信息:遗漏的类型错误:不能设置属性'值'为空 未捕获的引用错误:未定义聊天 未捕获的类型错误:无法设置为空的属性'值' 未捕获的引用错误:未定义聊天 – Icallitvera
if (domain == face)
{
Chat.openTab("sam.sebastian1", "Seb")
}
不
if (domain = face)
{
Chat.openTab("sam.sebastian1", "Seb")
}
比较是'==',而不是'=' – zerkms