Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Bookmarklet不工作_Javascript_Jquery_Facebook - Fatal编程技术网

Javascript Bookmarklet不工作

Javascript Bookmarklet不工作,javascript,jquery,facebook,Javascript,Jquery,Facebook,我正在创建一个bookmarklet,将facebook的all.js插入页面的标题中,但是它也不能正常工作,这里是: javascript: (function() { var msg = ''; if (typeof window.FB == 'object') { msg = 'Already Facebookified'; } else { var js = document.createElement('script');

我正在创建一个bookmarklet,将facebook的all.js插入页面的
标题中
,但是它也不能正常工作,这里是:

javascript: (function() {
    var msg = '';
    if (typeof window.FB == 'object') {
        msg = 'Already Facebookified';
    } else {
        var js = document.createElement('script');
        js.id = 'facebook-jssdk';
        js.async = true;
        js.src = "http://connect.facebook.net/en_US/all.js";
        document.getElementsByTagName('head')[0].appendChild(js);
        msg = (typeof window.FB == 'object' ? 'Facebookified': 'Unable to Facebookify');
    }

    alert(msg);

})();

有人能提出它可能有什么问题吗?

您可能希望在加载Facebook JS-SDK后使用
window.fbAsyncint
运行代码,并添加
fb root
节点(某些功能需要此节点):


加载Facebook JS-SDK后,您可能希望使用
window.fbAsyninit
运行代码,并添加
fb root
节点(某些功能需要此节点):

正如前面所指出的,您需要“监听”脚本才能完成加载。为此,至少有两个脚本元素事件可以挂接(onreadystatechange和onload)。您可以按如下方式设置它们:

javascript: (function() {
    var isFacebookified = function () {
        return typeof window.FB === 'object';
    };
    var scriptIsDoneLoading = function () {
        var msg = (isFacebookified ? 'Facebookified': 'Unable to Facebookify');
        alert(msg);
    };
    if (isFacebookified()) {
        alert('Already Facebookified');
    } else {
        var js = document.createElement('script');
        js.id = 'facebook-jssdk';
        js.async = true;
        js.src = "http://connect.facebook.net/en_US/all.js";
        js.onreadystatechange = scriptIsDoneLoading;
        js.onload = scriptIsDoneLoading;
        document.getElementsByTagName('head')[0].appendChild(js);
    }
})();
脚本加载完毕后,您应该会收到警报

希望这有帮助

Pete

正如前面所指出的,您需要“监听”脚本才能完成加载。为此,至少有两个脚本元素事件可以挂接(onreadystatechange和onload)。您可以按如下方式设置它们:

javascript: (function() {
    var isFacebookified = function () {
        return typeof window.FB === 'object';
    };
    var scriptIsDoneLoading = function () {
        var msg = (isFacebookified ? 'Facebookified': 'Unable to Facebookify');
        alert(msg);
    };
    if (isFacebookified()) {
        alert('Already Facebookified');
    } else {
        var js = document.createElement('script');
        js.id = 'facebook-jssdk';
        js.async = true;
        js.src = "http://connect.facebook.net/en_US/all.js";
        js.onreadystatechange = scriptIsDoneLoading;
        js.onload = scriptIsDoneLoading;
        document.getElementsByTagName('head')[0].appendChild(js);
    }
})();
脚本加载完毕后,您应该会收到警报

希望这有帮助


Pete

尝试异步加载脚本时,会出现一些常见错误。此代码应适用于:

function loadScript(src, callback) {
  var s,
      r;
  s = document.createElement('script');
  s.src = src;
  s.onload = s.onreadystatechange = function () {
/**
 * LOAD/READYSTATE LOGIC
 * execute if the script hasn't been ready yet and:
 * - the ready state isn't set
 * - the ready state is complete
 *   - note: readyState == 'loaded' executes before the script gets called so
 *     we skip this event because it wouldn't have loaded the init event yet.
 */
    if (!r && (!this.readyState || this.readyState === 'complete')) {
      //set the ready flag to true to keep the event from initializing again
      r = true;
      callback();
    }
  };
  document.body.appendChild(s);
}
您可以将其用作:

loadScript('http://connect.facebook.net/en_US/all.js', function () {console.log(window.FB)}

尝试异步加载脚本时,会出现一些常见错误。此代码应适用于:

function loadScript(src, callback) {
  var s,
      r;
  s = document.createElement('script');
  s.src = src;
  s.onload = s.onreadystatechange = function () {
/**
 * LOAD/READYSTATE LOGIC
 * execute if the script hasn't been ready yet and:
 * - the ready state isn't set
 * - the ready state is complete
 *   - note: readyState == 'loaded' executes before the script gets called so
 *     we skip this event because it wouldn't have loaded the init event yet.
 */
    if (!r && (!this.readyState || this.readyState === 'complete')) {
      //set the ready flag to true to keep the event from initializing again
      r = true;
      callback();
    }
  };
  document.body.appendChild(s);
}
您可以将其用作:

loadScript('http://connect.facebook.net/en_US/all.js', function () {console.log(window.FB)}

脚本是异步加载的,您需要侦听脚本以完成加载executing@zzzzBov:我不明白,你能详细说明我应该在代码中做什么更改吗?我想我的答案可能与此相关。@zzbov:谢谢你的帮助:)脚本是异步加载的,你需要听一听脚本才能完成executing@zzzzBov:我不明白,你能详细说明我应该在代码中做什么更改吗?我想我的答案可能是相关的。@zzzzBov:谢谢你的帮助:)谢谢,但它在控制台上返回了这个错误:
Uncaught SyntaxError:Unexpected token var
当我从bookmark运行它时。我已经修复了被剪断的代码(这是因为所有的行都是组合的,第8行的大括号后面需要分号)谢谢,但它在控制台上返回了这个错误:
Uncaught SyntaxError:Unexpected token var
当我从bookmark运行它时。我已经修复了被剪断的部分(这是因为所有的行都是组合的,在第8行的大括号后面需要分号)这也没有帮助。当我把它放进书签并运行时,没有错误,我得到的消息已经面世了,但是使用firebug
console.log(typeof window.FB)
返回
未定义的
Whoops!
if(isFacebookified){
应该是
if(isFacebookified()){
否则,我们将检查是否存在不调用它的函数。添加额外参数后,它对我有效。编辑响应以反映正确的代码。这也没有帮助。当我将其放入书签并运行时,没有错误,我得到的消息已通过firebug
console.log(typeof window.FB)进行了Facebookified
返回
undefined
Whoops!
if(isFacebookified){
应该是
if(isFacebookified()){
否则我们正在检查是否存在不调用它的函数。添加额外参数后,它对我有效。编辑响应以反映正确的代码。