2013-08-05 94 views
0

我使用Java ScriptEngine調用從下的程序一定條件下輔助bean一個JS的功能。問題在於JSF頁面在iFrame中運行。儘管在這個階段iFrame並不是真正的問題,但我希望它能夠瀏覽到新的頁面。爲此,我使用了top.window.locationparent.location,它們可以在按鈕上單擊以將頁面加載到iFrame中而不會出現問題。的Java和ScriptEngine的父窗口功能

這是我使用這個代碼的樣本:

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我已閱讀,他們是從瀏覽器itsself調用,而不是的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,IEFF全部在一起。

所以問題:我怎樣才能得到JS功能可能使用parent.location?我想,我需要檢查使用的瀏覽器,然後導入或從那裏取決於瀏覽器中調用的東西,但我不知道我應該怎麼去上班做到這一點。任何可能解決這個問題的光線都會非常有幫助。

在此先感謝。

+0

如果你真正的問題是控制其中的鏈接被打開,你可以只添加相應的[目標屬性的錨(http://www.w3schools.com/tags/att_a_target.asp),例如'目標= 「_頂部」'。 – lefloh

回答

0

我已經解決了這個問題,方法是在JavaScript方法中重定向之前檢查cookie,並在body標籤中使用onload="someMethod();"加載頁面之前調用JS方法。一切正常,通過使用parent.location導航到新頁面。經過FF,Chrome和IE測試。因此,也有沒有必要在這種情況下,的ScriptEngine