【发布时间】:2014-05-06 02:25:33
【问题描述】:
我有一个网页,上面有一个"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
}
现在,我的问题是,这个run() 方法只有在我第一次单击"Start Portal" 时才会被调用。在随后的点击中,它会从服务器端重新加载带有 Portal URL 的 iframe,但永远不会再次调用 angularjs run() 方法。
我尝试手动引导 Angular 应用,但无法正常工作。
我想以某种方式杀死或重新加载整个 angularjs 应用程序(如果它以前已加载)并在 iframe 加载我的 angularjs 门户时重新开始。
我无法对 iframe 代码进行任何修改,因为在生产中这将是我客户的网站。我只需向他们提供 angularjs 门户网址,他们将使用我使用的类似方法加载。
【问题讨论】:
-
它似乎工作正常plnkr.co/edit/VT5DUXgYN0ppXkJgaLvC?p=preview(检查控制台以查看它是否正常工作)。我还通过在我的 PC 上运行 1 个域来尝试跨域,但仍然无法重现该问题。你用的是什么浏览器?
标签: javascript html angularjs iframe