我正在使用 JavaScriptEngine
在程序中的某些条件下从支持 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.location
不是JavaScript。因此,因此,我收到以下错误:top.window.location
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
?我想我需要检查使用的浏览器,然后根据浏览器从那里导入或调用某些东西,但我不确定我应该如何去工作。任何可以解决这个问题的线索都会非常有帮助。
提前致谢。