我正在使用Java ScriptEngine
在程序中的某些条件下从辅助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
和top.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")
和其他类似的完全相同。并且似乎错误仍然存在于 Chrome , IE 和 FF 中的sun.org.mozilla.....
。
所以问题:如何让JS函数可以使用parent.location
?我想我需要检查所使用的浏览器,然后根据浏览器导入或调用某些东西,但我不确定我应该如何去做这个。任何可能解决这个问题的光都会非常有用。
提前致谢。
答案 0 :(得分:0)
我已经解决了这个问题,通过在Javascript方法中重定向之前检查cookie,并在使用body标签中的onload="someMethod();"
加载页面之前简单地调用JS方法。通过使用parent.location
导航到新页面,一切都很顺利。在 FF,Chrome和IE 中进行了测试。因此,在这种情况下也不需要 ScriptEngine 。