最近在項目中碰到一個棘手的問題,我們的項目是用兩種語言寫的,其兩者之間會有一些跳轉的交互。我所面臨的問題就是通過Java項目調到ruby項目,然后還能由ruby項目跳轉到Java項目。第一次做這個有點不知所措。最后用了解決方案(PS:項目中session共享問題已經解決了)。
第一種解決辦法是在前端做控制,window.location.herf進行連接的跳轉。但是這個只能操作當前的window,因為我們的項目中是Java頁面作為一個iframe嵌套在ruby頁面中。所以要變父頁面的URL或者說就是整個頁面的URL。總結一下:window.location.herf
javascript中的location.href有很多種用法,主要如下。
1 self.location.href="/url" 當前頁面打開URL頁面 2 location.href="/url" 當前頁面打開URL頁面 3 windows.location.href="/url" 當前頁面打開URL頁面,前面三個用法相同。 4 this.location.href="/url" 當前頁面打開URL頁面 5 parent.location.href="/url" 在父頁面打開新頁面 6 top.location.href="/url" 在頂層頁面打開新頁面
如果頁面中自定義了frame,那么可將parent self top換為自定義frame的名稱,效果是在frame窗口打開url地址
此外,window.location.href=window.location.href;和window.location.Reload()和都是刷新當前頁面。區別在於是否有提交數據。當有提交數據時,window.location.Reload()會提示是否提交,window.location.href=window.location.href;則是向指定的url提交數據.
最重要的是window.location.href 語句可以實現一個框架的頁面在執行服務器端代碼后刷新另一個框架的頁面
"window.location.href"、"location.href"是本頁面跳轉
"parent.location.href"是上一層頁面跳轉
"top.location.href"是最外層的頁面跳轉
舉例說明:
如果A,B,C,D都是jsp,D是C的iframe,C是B的iframe,B是A的iframe,如果D中js這樣寫
"window.location.href"、"location.href":D頁面跳轉
"parent.location.href":C頁面跳轉
"top.location.href":A頁面跳轉
如果D頁面中有form的話,
<form>: form提交后D頁面跳轉
<form target="_blank">: form提交后彈出新頁面
<form target="_parent">: form提交后C頁面跳轉
<form target="_top"> : form提交后A頁面跳轉
關於頁面刷新,D 頁面中這樣寫:
"parent.location.reload();": C頁面刷新 (當然,也可以使用子窗口的 opener 對象來獲得父窗口的對象:window.opener.document.location.reload(); )
"top.location.reload();": A頁面刷新
第二種是在后端重定向到指定的URL,后端我們是使用springMVC,直接可以寫URL來實現跳轉,代碼如下:
1 @RequestMapping("redirect/{agentPartyId}/{flag}") 2 public String redirect(@PathVariable String agentPartyId, @PathVariable String flag){ 3 PropertyPlaceholderConfigurer bean = SpringContext.getBean(PROPERTY_CONFIG_BEAN); 4 Properties pros = bean.getProperties(); 5 String rubyServerUrl = pros.getProperty(RUBY_SERVER_URL); 6 String url = rubyServerUrl + "/integration/t0?ext=/apply/"+agentPartyId+flag; 7 logger.info("apply redirect url={}", url); 8 return "redirect:" + url; 9 }
大致想到的兩種解決方案就是這樣。