0

ScriptEngineプログラムの特定の条件下で、Java を使用してバッキング Bean から JS 関数を呼び出しています。問題は、JSF ページが iFrame で実行されていることです。この段階では iFrame は本当の問題ではありませんが、新しいページを閲覧できるようにしたいと考えています。このために、私は使用top.window.locationしてparent.locationおり、ボタンのクリックで問題なくiFrameからページをロードします。

これは、私がこれに使用しているコードのサンプルです:

    ScriptEngine se = new ScriptEngineManager().getEngineByName("JavaScript");
    se.eval("function someFunc(){parent.location = \"www.someurl.com\";}");
    Invocable invocableJS = (Invocable) se;
    invocableJS.invokeFunction("someFunc");

と私はparent.locationtop.window.locationそれらがブラウザ自体から呼び出され、JavaScriptではないことを読みました。このため、次のエラーが発生します。

javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "parent" is not defined. (<Unknown source>#1) in <Unknown source> at line number 1

document.getElementById("someComponent")および他の同様のものとまったく同じです。そして、エラーはsun.org.mozilla.....Chrome 、 IE 、および FF で一緒に残っいるようです

質問: JS 関数で を使用するにはどうすればよいparent.locationですか? 使用されているブラウザを確認し、ブラウザに応じてそこから何かをインポートまたは呼び出す必要があると思いますが、これを行うためにどのように仕事に行くべきかわかりません。この問題に光を当てられる可能性がある場合は、非常に役立ちます。

前もって感謝します。

4

1 に答える 1

0

onload="someMethod();"Javascript メソッドでリダイレクトする前に Cookie をチェックし、body タグを使用してページをロードする前に JS メソッドを呼び出すだけで、この問題を解決しました。parent.locationを使用して新しいページに移動することで、すべてがうまくいきました。FF、Chrome、IE でテスト済み。したがって、この状況ではScriptEngineも必要ありませんでした。

于 2013-08-16T10:56:32.343 に答える