Facebook连接器优雅地失败

时间:2014-01-06 17:23:26

标签: javascript jquery facebook

我正在使用来自facebook的Javascript连接器,我按照他们的说明实现了一切,一切顺利,直到facebook被公司政策阻止。然后你这样做会失败:

ref.parentNode.insertBefore(js, ref);

我在它周围添加了try / catch但它仍然失败。

我也试过添加<script id=...没有好处。

我尝试过不同的方式,我可以看到问题,我写了这个函数:

jQuery.cachedFacebookScript = function(url, options) {

    // Allow user to set any option except for dataType, cache, and url
    // Use $.ajax() since it is more flexible than $.getScript
    // Return the jqXHR object so we can chain callbacks
    return jQuery.ajax({
        dataType : "script",
        //cache : true,
        url : url, 
        error : function(XMLHttpRequest, textStatus, exception) {
            logger("Ajax failure: " + exception);
        }});
};

然后添加

$.cachedFacebookScript('//connect.facebook.net/en_UK/all.js')
    .done(function() {console.log("Done");})
    .error(function() {console.log("Error");})
;

没有调用任何回调,所以我无法捕获错误。

如果删除dataType : "script",行,则会调用两个错误回调。

所以它对我来说闻起来像JQuery的bug,所以单向循环可能是eval()我在成功回调中得到的javascript ...但是我没有达到上述目标,当我有权访问Facebook我收到此错误:

XMLHttpRequest cannot load http://connect.facebook.net/en_UK/all.js. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9080' is therefore not allowed access.

这里的其他问题似乎是服务器的事情......那么$ .getScript()如何获取javascript? doco说它是一个围绕$ .ajax的包装器,所以我写了一个新的包装器:

jQuery.myGetScript = function(url, success, error) {
    $.ajax({
          url: url,
          success: function(response) {
              eval(response);
              success();
          },
          error: function (response) {
              error();
          }
        });
}

我得到了相同的Origin错误。

JQuery文档说,从JQuery 1.5开始,你可以添加一个fail()......不,你不能这样做不行:

jQuery.myGetScript = function(url, success, error) {
    logger("Calling getScript()");
    ret = $.getScript(url)
        .done(function( script, textStatus ) {
            console.log("Successfully loaded script");
            success();
        })
        .fail(function( jqxhr, settings, exception ) {
            console.log("Failed to load script");
            error();
        });
};

有没有办法让这个优雅地失败,或者至少抛出一些我可以陷阱和处理/忽略的东西?

0 个答案:

没有答案