1

Prototypeを使用して、別のドメインからAjax.Requestを使用してjavascriptファイルをロードする方法を知っている人はいますか?またはこれが可能であれば?

私はこれがjqueryで可能であると信じています、diggはFacebookAPIをロードするためにそれを行います:

jQuery.ajax({type:"GET",
url:"http://static.ak.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php",
cache:true, dataType:"script"});

ソース:http ://cotnet.diggstatic.com/js/loader/370/digg_facebook

コードを見ずに、URLが同一生成元ポリシーに違反し、dataTypeがスクリプトである場合、jqueryにはプロキシを使用する賢い機能があると思います。

4

2 に答える 2

0

トーマスの答えに感謝します。これを行うためにFacebookApiLoaderクラスを作成しました。これがソースです。現時点ではFirefox3でのみテストされています。これが誰かを助けることを願っています。これは、ページにfacebook apiに依存する要素があるかどうかを確認し、ある場合は、body終了タグの前に挿入してfacebookapiスクリプトをロードします。これはPrototypeJSライブラリに依存しています。Facebook APIを必要とする可能性のあるページでfacebookApiLoader.observe()を呼び出します。

var FacebookApiLoader = Class.create({
  initialize: function() {
    this.observer = null
    this.observedElement = null
  },
  apiDependentsVisible: function() {
    if (null == this.observedElement) {
      // $('facebook-login') is a div in my site that
      // is display:none initially.  Once it is made
      // visible then the facebook api is needed.
      // Replace 'facebook-login' with id relevant for your site
      this.observedElement = $('facebook-login')
    }
    return this.observedElement.visible()
  },
  apiLoadCompleted: function() {
    try {
      return !Object.isUndefined(FB) && !Object.isUndefined(FB_RequireFeatures)
    } catch (e) {
    }
    return false
  },
  initAndRequireFeatures: function() {
    FB_RequireFeatures(["XFBML"],
      function() {
        FB.init('secret-put-your-app-value-here','/xd_receiver.html', {})
      }
    );
  },
  initFacebookConnect: function() {
    new PeriodicalExecuter(function(pe) {
      if (this.apiLoadCompleted()) {
        this.initAndRequireFeatures()
        pe.stop()
      }
    }.bind(this), 0.2);
  },
  loadApi: function() {
    // Use body for facebook script as recommended in Facebook
    // docs not to insert in head as some browsers have 
    // trouble with it
    body = $$('body')[0]
    // TODO use https protocol if page is secure
    script = new Element('script', { 'type': 'text/javascript',
      'src': 'http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php' })
    body.appendChild(script)
    this.initFacebookConnect()
  },
  loadApiIfRequired: function() {
    if (this.apiDependentsVisible()) {
      this.observer.stop()
      this.loadApi()
    }
  },
  observe: function() {
    if (null == this.observer) {
      this.observer = new PeriodicalExecuter(this.loadApiIfRequired.bind(this), 0.2)
    }
  }
});
// The FacebookApiLoader attributes are lazily loaded
// so creating a new facebookApiLoader
// is as low resource usage as possible
var facebookApiLoader = new FacebookApiLoader();

次に、オンデマンドでFacebook APIが必要になる可能性のあるページで、

facebookApiLoader.observe();
于 2010-01-23T13:09:25.677 に答える
0

これをチェックしてください..Prototypeライブラリの機能を有効にする特定のプラグインがあるようです。たとえば、jQueryはすでに長い間サポートしていると著者は述べていますが、デフォルトではPrototypeはサポートされていないようです。

于 2010-01-22T14:09:57.303 に答える