2017-11-24 30 views
0

こんにちは私のページにいくつかのiframeを追加しています。 iframeには1つの値しか含まれておらず、それを親のフォームにしたいと考えています。私はスタックオーバーフローでここに投稿された回答の多くを試してみましたが、どれも私のために働いていません。下に、イメージを添付して、iframeがページにどのように含まれているかを確認できます。私は後でそれを使うことができるように、赤枠で値を取得したいと思います。親からiframeからinnerTextを取得

enter image description here

コード:

var graphUrls = tmpSource.getGetFeatureInfoUrl(
    graphCoor, viewResolution, 'EPSG:3857', {'INFO_FORMAT': 'text/html'}); 
    var frr = document.createElement("iframe"); 
    frr.onload = function(){ 
    var jjj = $("iframe body a").text() 
    var kkk = $("iframe body #ras-val").text() 
    console.log("jjj ", jjj) 
    console.log("kkk ", kkk) 
    }; 
    frr.id = sourceParams.year + "-" + sourceParams.month + "-" + sourceParams.day;   
    frr.src = graphUrls 
    document.body.appendChild(frr); 
+0

jQueryを使ってみましたか? $( "iframe body a")。text()? – Kathara

+0

または$( "iframe body#ras-val")。text()? – Kathara

+0

ねえ、ソリューションは空の文字列だけを返します。私は$( "#" + String(frames [i] .id)))contents()。find( "a")も試しました。これはinnerTextの値が深いところに保存されているが、EdgeではChromeでこの文字列も空のオブジェクトを返します。値にアクセスしようとすると、まだiframeがロードされていない可能性がありますか?なぜ異なるブラウザで異なる動作をするのですか?この場合iframeが読み込まれるまでどのように待つのですか? –

答えて

2

返されたURLは、メイン文書として、この場合だけでは、同じドメインから
であるならば、あなたはのcontentDocumentを渡すことができますあなたのiframeを$(selector, context)の2番目のパラメータとして使用します。

// frame is you iframeElement 
$('#ras-val', frame.contentDocument).text() 

As a fiddle StackSnippetのヌルフレームは、セレクタは、この文脈に対する相対になることを...私たちはインナーフレームにアクセスするために

注意を許可しないので、あなたはしませんoriginedので、 "iframe body a"を渡しますが、ちょうど"body a"を渡してください。

URLが同じドメインに属していない場合、セキュリティ上の理由からフロントエンドコードはこのドキュメントにアクセスできません。

+0

これはうまく動作し、実際にiframeの中にあるものはすべて文字列として取得します。もう一つのこと:iframeスクリプトにあるvar rasValの値にアクセスしたいのですが?どうすればいい?ご協力ありがとうございました! –

+1

@Alešinarこの変数がグローバルスコープ内で宣言されている場合、Windowオブジェクトにアタッチされ、 'frame.contentWindow'で取り出せます。スコープされた関数で定義されている場合、それを取得することはできません。 – Kaiido

関連する問題