0

我正在使用 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.....​​在于ChromeIEFF中。

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

提前致谢。

4

1 回答 1

0

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

于 2013-08-16T10:56:32.343 回答