2012-02-13 10 views
0

私は、同じページ内にアプレットとiframeを持っています。 iframeタグには、iframeページが変更されるたびにアプレットのメソッドを呼び出すonload属性があります。アプレットはiframeドキュメントの要素にアクセスし、ページ上のさまざまなタイプのタグの数を数えます。Javaアプレットはどのようにして同じページ内のiframeにアクセスできますか?

私はこのスクリプトはときに、ページが最初にロードを実行している場合、それは正常に動作しますインラインフレームに

Class c = Class.forName("com.sun.java.browser.plugin2.DOM"); 
Method m = c.getMethod("getDocument", new Class[]{java.applet.Applet.class}); 
Object obj = m.invoke(null, new Object[]{this}); 
HTMLDocument doc = (HTMLDocument)obj; 

NodeList nodeList = document.getElementsByName("iframe"); 
if (nodeList.getLength()>0) { 
    Node node1 = nodeList.item(0); 
    if (node1 instanceof HTMLIFrameElement) { 
     Document doc = ((HTMLIFrameElement)node1).getContentDocument(); 
      if (doc instanceof HTMLDocument) { 
       document = (HTMLDocument)doc; 
       if (document.hasChildNodes() { 
        // do some stuff 
       } 
      } 
     } 
    } 
} 

にアクセスし、アプレットに次のコードを、持っている - それは、IFRAMEのコードにアクセスし、それぞれにアクセスすることができますページ内の要素。

しかし、アプレットコードがiframeのonload属性から呼び出されると、アプレットはその文書を正しく読み取ることができません。私は正確に同じ文書に両方の時間にアクセスしていますので、私はonloadイベントを使用するときに、なぜそれができないの

netscape.javascript.JSException: No such property "hasChildNodes" on JavaScript object 

:? これは、次の例外がスローされますか私はこれを回避する方法はありますか?

答えて

0
  1. のJavaScript
  2. でそれを行う方法を図
  3. JS機能でそれをカプセル化します。
  4. アプレットから関数を呼び出します。

こうすれば、JSとJS /アプレットのインタラクションを別々にデバッグする方が簡単です。それは別のサーバー上にあるようJavaSciptは、IFRAMEのDOMにアクセスすることはできませんが、アプレットができ

+0

JavaSciptはiframeのDOMに別のサーバーとしてアクセスすることはできませんが、アプレットはこれを行うことができます。私が言う限りでは、iframeの内容を調べる方法は他にありません...そのため、ページをリロードするときにレンガの壁にぶつかったのはかなり迷惑です。 – claire

+0

JavaがWebページを使って行うことは、基本的にJSの背後ではどのような場合でも処理されます。したがって、JSがそれを行えない場合、アプレットができれば私は驚くだろう。 –

+0

これも私を困惑させましたが、アプレットは間違いなくiframeにアクセスできるはずです... – claire

0

...

では、アンドリューは正しい考えを持っていたと思います。 JSは他のサーバーusing JSONPのコンテンツにアクセスできます。

クロスドメインのiframeと通信するには、Portholeのようなものを調べる必要があります。

関連する問題