0

Jquery または javascript を使用して、Iframe の生のコンテンツ (すべての文字を意味します) を取得したいと考えています。それは簡単に聞こえますが、私はまだ正しい方法を見つけるのに苦労しています.

今のところ、これは Iframe 内の XML コンテンツのみです。ここにコード:

$(function() {

    var xmlContent = $("#CFrame").contents().find("*").text();

    // The magic
    $('#SResult').xslt({xml: xmlContent, xslUrl: 'stylesheet/designSS.xsl'});
});

htmlページ

<form id="searchForm" method="GET" target="ContentFrame" action="http://125.235.8.210:380/search" onSubmit="processContent()">
        .....
    </form>
</div>
<div id="SResult">
</div>
<iframe id="CFrame" name="ContentFrame" frameborder="1" height="2000px" width="1000px" scrolling="no" src="stylesheet/test.xml"></iframe>
</body>

ありがとう、

4

2 に答える 2

1

免責事項:それが実際にあなたの問題に対するエレガントな解決策であるかどうかに関係なく、私はあなたの質問に答えます. ジョセフはそれを問題として捉えているようです。彼がそうするのはおそらく正しいと思います。

mimetype text/xml を使用してフレームを取得しようとしても機能しません。ブラウザは処理を続行し、XML を HTML に「変換」します。それほど単純に聞こえないのはそのためです。この方法では、実際には不可能です。

この問題の簡単な回避策を紹介します。

<html>
<head>
<script>
function getXmlContents() {
    /*
    Note: Because of security reasons, the contents of a document can be accessed from another document only if the two documents are located in the same domain.
    http://www.w3schools.com/jsref/prop_frame_contentdocument.asp

    */
    var iframeDocument = document.getElementById('greetingFrame').contentDocument;
    if (iframeDocument == null) 
        return undefined;
    var xmlContainer = iframeDocument.getElementById('xmlContainer');
    if (xmlContainer == null)
        return undefined;
    return xmlContainer.innerText == null ? xmlContainer.textContent : xmlContainer.innerText;
};
</script>
</head>
<body>
<iframe id="greetingFrame" src="helloworld.html" onload="alert(getXmlContents())">
</iframe>
</body>
</html>

XML のコンテンツは、HTML (helloworld.html) 内にラップされます。

<html>
<body>
<script id="xmlContainer" type="text/xml">
  <?xml version="1.0" encoding="UTF-8"?>
  <title>
    Hello world
  </title>
</script>
</body>
</html>

Chrome、Firefox、および IE でこれを正常にテストしました。

もちろん、上記のように XML ドキュメントを HTML スクリプト タグ内にラップする必要があります。たとえば、XML をレンダリングしたい場合は、別のタグで XML をラップすることもできますが、html エンコーディングを使用して XML をエンコードする必要があります。これはサーバー側で行う必要があります。非常に単純な (php/ruby/python/etc) スクリプトで十分です。

于 2013-01-06T12:33:42.480 に答える
0

XML がドメインにある場合は、AJAX を使用した方がよいでしょう。特にjQuery ライブラリを使用すると、XMLが解析され、すぐに操作できるようになります。

ドメインに存在しない場合、リモートサーバーとクライアントのブラウザーの両方が CORS をサポートしない限り、 AJAX 経由でアクセスすることはできません。

ただし、オプションがあります。

  • リモート サーバーの API が JSONP をサポートしている場合は、XML の代わりにそれを使用します。その後、jQuery を使用して JSONP データを取得したり、独自のスクリプト ローダーをロールしたりできます。
  • または、サーバーを使用して XML をプロキシします。サーバーは同一オリジン ポリシーに制限されません。フォーム データをリモート サーバーに中継し、リモート ページを取得する API をサーバー上に作成します。すべて、サーバーがブラウザーであるかのように行います。次に、結果を転送します。
于 2013-01-06T11:12:40.133 に答える