gpt4 book ai didi

javascript - IFrame 中的 AngularJS run() 方法不会在 iframe 重新加载时重新运行

转载 作者:可可西里 更新时间:2023-11-01 12:48:17 25 4
gpt4 key购买 nike

我有一个带有 “Start Portal” 按钮的网页,它下面有一个 iframe(在同一网页上),id 为:MyFrame

我使用 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
}

现在,我的问题是,只有在我第一次单击 “Start Portal” 时才会调用此 run() 方法。在随后的点击中,它会从服务器端重新加载带有 Portal URL 的 iframe,但永远不会再次调用 angularjs run() 方法。

我尝试手动引导 Angular 应用程序,但无法正常工作。

我想以某种方式终止或重新加载整个 angularjs 应用程序(如果它之前已加载)并在 iframe 加载我的 angularjs 门户时重新开始。

我无法对 iframe 代码进行任何修改,因为在我客户的网站的生产环境中。我只需向他们提供 angularjs 门户 url,他们将使用我使用的类似方法加载。

最佳答案

为了防止从缓存中加载 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);
},

关于javascript - IFrame 中的 AngularJS run() 方法不会在 iframe 重新加载时重新运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22682103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com