Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IFrame中的AngularJS run()方法在重新加载IFrame时不会重新运行_Javascript_Html_Angularjs_Iframe - Fatal编程技术网

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

Javascript IFrame中的AngularJS run()方法在重新加载IFrame时不会重新运行,javascript,html,angularjs,iframe,Javascript,Html,Angularjs,Iframe,我有一个网页,上面有一个“开始门户”按钮,下面有一个iframe(在同一网页上),id为:MyFrame 我使用jQueryAjax获取基于angularjs的门户的URL,并设置iframe的src。下面给出了加载基于angularjs的门户的代码。“portalURL”参数包含URL $.ajax({ method: 'post', crossDomain: true, contentType: "application

我有一个网页,上面有一个
“开始门户”
按钮,下面有一个iframe(在同一网页上),id为:
MyFrame

我使用jQueryAjax获取基于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中正确打开

但是,如果我再次单击
“启动门户”
按钮,就会调用相同的AJAX代码,我再次获得AngularJS门户URL,并再次加载它。这很好,但有一个问题

我用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()
方法只有在我第一次单击
“启动门户”
时才被调用。在随后的单击中,它确实会从服务器端重新加载带有门户URL的iframe,但是angularjs
run()
方法将不再被调用

我试图手动引导angular应用程序,但无法使其正常工作

不知何故,如果angularjs应用程序之前已加载,我希望杀死或重新加载整个angularjs应用程序,并在iframe加载我的angularjs门户时重新开始


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

为了防止从缓存加载iframe内容,您可以向
门户url添加随机参数:

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);
},

这可以通过控制浏览器行为轻松实现

使用HTTP头或标记从web服务器控制iframe页面的浏览器缓存

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


Anguarjs可以控制Angular应用程序的加载方式,但无法控制iframe缓存。只有在加载整个页面时,才会重新加载Iframe。

它似乎工作正常(请检查控制台以查看它是否工作)。我还尝试了跨域,在我的电脑上运行了1个域,但仍然无法重现问题。您使用的是什么浏览器?我怎么会错过版本逻辑。谢谢你的回答,我在服务器端的PortalURL中添加了一个版本,它成功了。我无法在客户的网站上对IFRAME src javascript进行任何更改,但版本控制帮助了我。谢谢:)谢谢,但另一个版本的逻辑帮助了我。