2014-03-27 71 views
3

我有一個帶有"Start Portal"按鈕的網頁和位於其下的iframe(在同一網頁上),其ID爲:MyFrameIFrame中的AngularJS run()方法在iframe重新加載時不會重新運行

我使用jQuery AJAX獲取基於angularjs的門戶網站的URL,並設置我的iframe的src。下面給出了加載基於angularjs的門戶的代碼。 'portalURL'參數包含URL。

$.ajax({ 
      method: 'post', 
      crossDomain: true, 
      contentType: "application/json; charset=utf-8", 
      url: webmethodurl, 
      data: {}, 
      dataType: "jsonp", 
      jsonp: "JSONCallback", 
      success: function(portalURL){ 
       $('#MyFrame').attr('src',portalURL); 
      }, 
      error: function(e){ 
       console.log(e); 
      } 
     }); 

這工作正常,我的AngularJS門戶在iframe中正常打開。

但是,如果我再次單擊"Start Portal"按鈕,將調用相同的AJAX代碼,然後再次獲取AngularJS門戶網站URL並重新加載。這工作正常,但有1個問題。

我已經寫在AngilarJS run()方法的一些驗證碼:

//Some initializing code before Angular invokes controllers 
MyApp.run(['$rootScope', function($rootScope) { 
    ValidateSession();     //1. First validate the session 
}]); 

function ValidateSession(){ 
    //this does some validation checks 
} 

現在,我的問題是,這種run()方法只當我點擊"Start Portal"首次調用。在隨後的點擊中,它會從服務器端重新加載帶有Portal URL的iframe,但不會再次調用angularjs run()方法。

我試圖手動引導角度的應用程序,但無法正常工作。

不知何故,我想殺死或重新加載整個angularjs應用程序,如果它是以前加載並啓動新鮮,每當iframe加載我的angularjs門戶。

我無法對iframe代碼進行任何修改,就像在我的客戶的網站上進行生產一樣。我只需要向他們提供angularjs門戶網址,他們將使用我使用的類似方法加載它們。

+1

它似乎工作正常http://plnkr.co/edit/VT5DUXgYN0ppXkJgaLvC?p=preview(檢查控制檯,看看它的工作)。我還嘗試在我的PC上運行1個更多的域名,但仍無法重現問題。你使用的是什麼瀏覽器? –

回答

2

爲了防止iframe的內容從緩存中加載,你可以隨機參數附加到portalURL

success: function(portalURL) { 
    // TODO: detect whether the portalURL already contains query string parameters 
    // and use & instead of ? 
    portalURL += '?v=' + (new Date()).getTime() + Math.floor(Math.random() * 1000000); 
    $('#MyFrame').attr('src', portalURL); 
}, 
+0

我如何錯過版本邏輯。感謝您的回答,我在服務器端爲我的PortalURL添加了一個版本,並且工作正常。我無法對我的客戶網站上的IFRAME src javascript做任何更改,但版本控制幫助了我。謝謝:) –

2

這可以通過控制瀏覽器行爲可以輕鬆實現

爲了控制瀏覽器緩存從HTTP服務器或帶有標籤的Web服務器的iframe頁面。

<meta HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> 
<meta HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> 

Anguarjs可以控制Angular App的加載方式,但它無法控制iframe緩存。僅當整個頁面被加載時,iframe才被重新加載。

+0

謝謝,但其他版本的邏輯幫助我。 –