2012-01-11 18 views
19

現在、私は、js/jQueryを使用してアクセスしようとしているFCKEditorを使用して、OpenCms(JavaベースのオープンソースCMS)を少しカスタマイズしようとしています。jQueryを使用してiframeのhtmlコンテンツを取得する

私はiframeのhtmlコンテンツを取得しようとしますが、常に返品としてnullが返されます。 これは私がIFRAMEからHTMLコンテンツを取得しようとする方法である:スクリーンショットを見て

var editFrame = document.getElementById('ta_OpenCmsHtml.LargeNews_1_.Teaser_1_.0___Frame'); 
alert($(editFrame).attr('id'));   // returns the correct id 
alert($(editFrame).contents().html()); // returns null (!!) 

、私がアクセスできるようにすると、現在の値を保持している「LargeNews1 /ティーザー」HTMLセクション、「Newslineですエン... "。 以下、Firebugのhtml構造を見ることができます。

しかし、$(editFrame).contents().html()はnullを返し、理由はわかりませんが、$(editFrame).attr('id')は正しいIDを返します。

iframeのコンテンツ/ FCKEditorは同じサイト/ドメインにあり、サイト間の問題はありません。 IFRAMEの

enter image description here

HTMLコードがhttp://pastebin.com/hPuM7VUz

が更新されます

は、ここに機能するソリューションです:

var editArea = document.getElementById('ta_OpenCmsHtml.LargeNews_1_.Teaser_1_.0___Frame').contentWindow.document.getElementById('xEditingArea');       
$(editArea).find('iframe:first').contents().find('html:first').find('body:first').html('some <b>new</b><br/> value'); 

答えて

46

.contents()HTML()は、IFRAMEのHTMLコードを取得するために動作しません。あなたはそれを得るために以下を行うことができます:

$(editFrame).contents().find("html").html(); 

それはiframeのすべてのhtmlを返します。あるいは、 "html"の代わりに "body"や "head"を使ってそれらのセクションを取得することもできます。

+0

ありがとうございました。私は自分の質問を編集し、最後に最後の解決策を追加しました。 –

+2

これはFirefoxでは動作しますが、chromeでは動作しません。私はちょうど得る。 – user3411192

2

は私が最初の行を置き換える提案:

var editFrame = $('#ta_OpenCmsHtml.LargeNews_1_.Teaser_1_.0___Frame'); 

...と第二警告発現と:

editFrame.html() 

一方で、あなたはワット同じことを達成することを好む、場合/ Oのjqueryの(多くのクーラー、私見では)だけではJavaScriptを使用することができます。

var editFrame = document.getElementById('ta_OpenCmsHtml.LargeNews_1_.Teaser_1_.0___Frame'); 
    alert(editFrame.innerHTML); 
+0

jQueryは点を持つDIVでうまく動かない。私はFCKEditorコンポーネントのidを(残念ながら)変更することはできません。私は上記の提案を上記のテストで行い、最終的に使用した解決策を後で掲載する予定です。皆さんありがとう。 –

0

あなたのiframeを参照してください。同じドメイン内にする必要があります:

<iframe style="width: 100%; height: 100%;" frameborder="0" aria-describedby="cke_88" title="Rich text editor, content" src="" tabindex="-1" allowtransparency="true"/> 

私たちは、こののiframeからデータを取得することができますとして:

var content=$("iframe").contents().find('body').html(); 
alert(content); 
関連する問題