Java ScriptEngine和父窗口函数

时间:2013-08-05 09:22:54

标签: java javascript browser scriptengine

我正在使用Java ScriptEngine在程序中的某些条件下从辅助bean调用JS函数。问题是JSF页面在iFrame中运行。虽然iFrame在这个阶段不是真正的问题,但我希望它能够浏览到新页面。为此,我使用了top.window.locationparent.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")和其他类似的完全相同。并且似乎错误仍然存​​在于 Chrome IE FF 中的sun.org.mozilla.....

所以问题:如何让JS函数可以使用parent.location?我想我需要检查所使用的浏览器,然后根据浏览器导入或调用某些东西,但我不确定我应该如何去做这个。任何可能解决这个问题的光都会非常有用。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题,通过在Javascript方法中重定向之前检查cookie,并在使用body标签中的onload="someMethod();"加载页面之前简单地调用JS方法。通过使用parent.location导航到新页面,一切都很顺利。在 FF,Chrome和IE 中进行了测试。因此,在这种情况下也不需要 ScriptEngine