3

私たちのサイトでは、Javascriptwww.foo.comをダウンロードして使用したいと考えています。http://feeds.foo.com/feed.xml明らかにAccess-Controlを使用しますが、Access-Controlをサポートしていないブラウザーの場合、フォールバックとして次のことを検討しています。

www.foo.com、を設定document.domainし、コールバック関数を提供し、フィードを(非表示)にロードしますiframe

document.domain = 'foo.com';
function receive_data(data) {
 // process data
};

var proxy = document.createElement('iframe');
proxy.src = 'http://feeds.foo.com/feed.xml';
document.body.appendChild(proxy);

feeds.foo.comで、XSLをに追加し、それfeed.xmlを使用してフィードをhtmlドキュメントに変換します。このドキュメントはdocument.domain、フィードデータをjsonとして親にコールバック関数を設定して呼び出します。

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 <xsl:template match="ROOT">
  <html><body>
   <script type="text/javascript">
    document.domain = 'foo.com';
    parent.receive_data([<xsl:apply-templates/>]);
   </script>
  </body></html>
 </xsl:template>
 <!-- templates that transform data into json objects go here -->
</xsl:stylesheet>

feeds.foo.comからXMLをロードするためのより良い方法はありますか?このiframe-proxy / xslt / jsonpトリックの影響は何ですか?(..そしてどのような場合に失敗しますか?)


備考

  • これはSafariとChromeでは機能しませんが、どちらもAccess-Controlをサポートしているため、問題ありません。
  • 変更をほとんどまたはまったくしたくないfeeds.foo.com
  • サーバー側のプロキシソリューションを認識しています(ただし、関心はありません)。
  • 更新: それについて書いた
4

2 に答える 2

2

yahoo API ( YQL ) を使用できます。URL、形式、およびコールバックを指定するだけです。

これは一種のサーバー側ソリューションですが、サーバー上ではありません:)

于 2010-02-11T21:30:15.647 に答える
1

両方のドメインを制御できる場合は、 EasyXDMなどのクロスドメイン スクリプティング ライブラリを試すことができます。このライブラリは、クロス ブラウザーの癖をラップし、利用可能な最適なメカニズムを使用して異なるドメイン間でクライアント スクリプトで通信するための使いやすい API を提供します。ブラウザ (利用可能な場合はpostMessage、利用できない場合は他のメカニズム)。

警告: 動作させるには、両方のドメインを制御する必要があります (「制御」とは、両方に静的ファイルを配置できることを意味します)。ただし、サーバー側のコードを変更する必要はありません。

もう 1 つの警告: ここにはセキュリティへの影響があります。他のドメインのスクリプトを信頼していることを確認してください。

于 2010-05-04T18:06:37.603 に答える