2013-04-07 10 views
8

iframeを使用して別のhtmlページと見なすことができる子フォームを埋め込むWebフォームを自動化する必要があります。iframe内の子オブジェクトのインスタンスを取得

したがって、iframeであるビューフィールドと呼ばれるものを含む親ドキュメントを取得します。 iframeの中には、「子の」埋め込みWebページがあります。

簡単な例:私はhtmlのオフ多くをカットしている

は、次に適切なサイズ

<html> 
<body> 
    <div id="123" arid=123 artype="View" ardbn="vfMyChild" 
    class="arfid123 ardbnvfMyChild" 
STYLE="top:49 left:75 width:1038 height:322" arvfframe="&lt;iframe style=&quot;top:0 left:0 width:1038; height:322&quot name=&quot;VF123&quot; title=&quot;View Field&quot; src=&quot;javascript:&amp;quot&#59;&amp;lt&#59;HTML&amp;gt&#59;&amp;lt&#59;/HTML&amp;gt&#59;&amp;quot&#59;&quot; &gt; 
&lt;/iframe&gt;"> 
</div> 

</body> 
</html> 

に組み込み、それを減らすために子HTMLはこのようにシンプルになります:

<html> 
<body> 
<div id="321" arid=321 artype="Char" ardbn="txtRegister"> 
    <label id="label321" class="label f6">Register:</label> 
    <textarea id="arid_321" cols="20" maxlen=255 rows=1></textarea> 
</div> 
</body> 
</html> 

STYLE =に含まれるhtmlはちょっと奇妙に見えます。しかし、私はそれがiframeのようなものであることがわかります。

トップレベルのドキュメントオブジェクトのインスタンスがあり、id = 123のdivのインスタンスがあります。私は子のtextareaオブジェクトを自動化する必要があります。私は動作しなかった以下を試しました。

var viewfields; //is a ref to the div with id=123 

if(viewfields) { 
    window.alert("viewfields.length=" + viewfields.length); //prints len=1 as expected 
    // line below get Caught exception: Unable to get value of the 
    // property 'document': object is null or undefined 
    var innerDoc = viewfields[0].contentDocument || viewfields[0].contentWindow.document; 
    if(innerDoc) { 
      window.alert("Wohoo we have an innerDoc"); 
    } 
} else 
     window.alert("no view fields found"); 

これはIE9を使用してテストしています。

このhtmlで内側のWebページのインスタンスを取得できますか?もしそうなら、どうですか?

EDIT

それが助け場合は、ここで問題になっているdiv要素の実際の、未編集のHTMLです。

<div id="WIN_0_536870915" arid=536870915 artype="View" ardbn="vfCubaChildren" class="arfid536870915 ardbnvfCubaChildren" STYLE="top:49&#59; left:75&#59; width:1038&#59; height:322&#59;z-index:1001&#59;background-color:transparent&#59;" arvfframe="&lt;iframe style=&quot;top:0&amp;#59&#59; left:0&amp;#59&#59; width:1038&amp;#59&#59; height:322&amp;#59&#59;background-color: transparent&amp;#59&#59;&quot; name=&quot;VF536870915&quot; frameborder=1 scrolling=&quot;auto&quot; allowtransparency=&quot;true&quot; title=&quot;View Field&quot; src=&quot;javascript:&amp;quot&#59;&amp;lt&#59;HTML&amp;gt&#59;&amp;lt&#59;/HTML&amp;gt&#59 ;&amp;quot&#59;&quot; onload=&quot;DVFol&amp;#40&#59;&amp;#41&#59;&quot;&gt; 
&lt;/iframe&gt;"> 
</div> 

このdivは子フォームを保持します。子フォームは別のHTML Webページと似ています。それは、標準的なHTML入力フィールドとテキストエリアを持っています。私は子供のテキストエリアにテキストを投稿する必要があります(親から)。しかし、問題は私がまだ親から子HTMLオブジェクトにアクセスすることができないことです。

+0

は、私はおそらくあなたが作業しているものを認識しません。 'arid'、' artype'、 'ardbn'、' arvfframe'要素属性は何が指定されていますか? – Jesse

+0

視界は 'iframe'の' div'だと思ったのですが、配列のように扱っていますか?また、コードに影響を与えるべきではありませんが、いくつかの属性については引用符がありません。 –

+0

@ Jesse aridなどは、Webアプリケーションで使用されるカスタム属性です。それが役に立つなら、WebアプリはBMC Remedyです。 –

答えて

2

iframeの内容が読み込まれていない可能性があります。 iframeが読み込まれているかどうかを調べることができます。そうであれば、そのdocument要素にアクセスしてみてください。

たとえば、iframeのdocument要素にアクセスするコードは、iframeのonloadイベント中に呼び出される関数AfterFrameLoads()に分割されます。

var viewfields; //is a ref to the div with id=123` 

if(viewfields) { 
    window.alert("viewfields.length=" + viewfields.length); //prints len=1 as expected 

    // Check if iframe loading is complete, attach rest of code to onload event 
    if (viewfields[0].addEventListener){ // for Mozilla, FF, Chrome, etc... 
     viewfields[0].addEventListener("onload",AfterFrameLoads()); 
    } 
    else if (viewfields[0].attachEvent){ // for IE and Opera 
     viewfields[0].attachEvent("onload",AfterFrameLoads()); 
    } 
} 

// Attempt to access document after iframe loads. 

function AfterFrameLoads(){ 
    var innerDoc = viewfields[0].contentDocument || viewfields[0].contentWindow.document;  

    if(innerDoc) { 
      window.alert("Wohoo we have an innerDoc"); 
    } 
    else { 
     window.alert("no view fields found"); 
    } 
} 
+0

私が抱えている問題は内部のdocにアクセスすることです。つまり、innerDocは常にnullです。すべてがロードされた後によくチェックする関数を呼び出します。 viewfieldsはnullではありませんが、私の問題は視野の内容を取得しています。 –

+0

innerDocはviewfields div/iframeを持つページと同じドメインにありますか?私はこのコードをテストして、別のドメインにあるURLにinnerDocを指し示そうとしましたが、innerDocはnull(ドキュメントオブジェクトなし)でしたが、親ウィンドウオブジェクトがありました。 – KernelPanik

+0

iframeのsrcが別のドメインにある場合、ドキュメントはnullになりますが、この場合は私は不思議です。ソースをテストしたところ、iframeが同じドメインに存在していても、microsoft.comのような外部サイトには存在していなかった場合、それが動作しました。 Ref:http://stackoverflow.com/questions/3999101/html-getting-document-from-iframe – KernelPanik

8

あなたがiframeに探して、親からデータを取得しようとしているなら、これはあなたが探しているものです。これは、ソースがiframeのソースが同じドメインのページである場合にのみ機能することに注意してください。そうしないと、そのコンテンツにアクセスする権限がなくなります。

http://jsfiddle.net/wao20/Ja54y/19/

まずあなたiframeがロードされ、その後、あなたはiframe DOMにアクセスするには、これを呼び出すことができることを確認してください。

$('#iframe_id_123').contents().find('#element_inside_your_iframe'); 

更新:あなたは純粋なJSソリューションをしたい場合は

あなたはこれを試すことができます。

var f = document.getElementById('f123'); 
if (f != undefined){ 
    var doc = f.contentDocument || f.contentWindow.document; 
    var txt = doc.getElementById('secret'); 
    alert(txt.value); 
} 
else { 
    alert('No iframe, no secret!'); 
} 

http://jsfiddle.net/wao20/Ja54y/34/

+2

JQueryを使用していない場合はどうなりますか? –

+0

上記のアップデートを確認してください。 –

関連する問題