9

個別の HTML ページと見なすことができる子「フォーム」を埋め込むために iframe を使用する Web フォームを自動化する必要があります。

したがって、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 ページのインスタンスを取得できますか? もしそうなら、どのように?

編集

それが役立つ場合は、問題の 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 オブジェクトにまだアクセスできないことです。

4

3 に答える 3

2

iframe のコンテンツが読み込まれていない可能性があります。iframe がロードされているかどうかを確認してみてください。ロードされている場合は、そのドキュメント要素にアクセスしてみてください。

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

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");
    }
}
于 2013-04-14T04:51:59.250 に答える