1

すべてのフレームが同じWebサーバーからロードされるマルチフレームWebアプリケーションの1つのフレームにアプレットがある場合、そのアプレットは他のフレームでJavaScriptメソッドをどのように呼び出すことができますか?私はこのようなことを試みました:

jsobject.call("parent.otherFrame.methodToCall", new String[] {"argument"});

関数が存在しないという苦情があります。ただし、次のように呼び出すと、次のようになります。

jsobject.eval("parent.otherFrame.methodToCall('argument')");

その後、それは動作します。の使用を避けようとしていますevalcallAppletとは異なるフレームでコードを呼び出すと、ブラウザとJVMの組み合わせごとに動作が異なる可能性がありますか?eval部分的にアプレット側ではなく、JavaScriptエンジンで評価されるので安全ですか?

4

2 に答える 2

2

Javaアプレット、JavaScript、および(恐ろしい)フレームの組み合わせに関する私の(限られた)経験は、次のことを行うのが最善であるということです。

  • アプレットを含むページ/フレームにスクリプトを含めます。0個以上の引数(そのうちの1つはターゲットフレームの名前である可能性があります)で呼び出されることを意図した関数を定義します。
  • アプレットから関数を呼び出します。
  • JavaScriptに、正しいフレームを見つけて必要なことをすべて実行させるという手間のかかる作業を任せましょう。

これには多くの利点があります。

  • Javaコンソールを使用するよりも、(たとえば)FFエラーコンソールを使用してJSをデバッグする方が簡単です。
  • JSは、より迅速かつ簡単に更新できます。
  • 各言語は、それが得意なことをエンコードします。JavaエディターにアクセスしてJavaが適切にフォーマットされていることを確認し、JSエディターにアクセスしてJSが適切にフォーマットされていることを確認できます。「Javaで書かれたJS」を読もうとするのとは対照的に、恐ろしい経験です。
  • スクリプトを機能させるための助けを求めるとき、JSの達人が簡単に読むことができる素晴らしい例があります!
于 2011-09-13T03:08:29.277 に答える
1

evalのない同等のコードは、おそらく次のようなものです。

jsobject = (JSObject)jsobject.getMember("parent");
jsobject = (JSObject)jsobject.getMember("otherFrame");
jsobject.call("methodToCall", new String[] {"hello!"});
于 2011-09-13T03:24:42.597 に答える