在Chrome中加载iframe时,"加载"事件未触发

los*_*ion 29 javascript iframe google-chrome angularjs

我试图在我的客户端上显示"掩码",而文件是动态生成的服务器端.似乎推荐解决此问题(因为它不是ajax)是使用iframe并从onload或done事件中侦听以确定文件何时实际从服务器传送到客户端.

这是我的角度代码:

    var url = // url to my api
    var e = angular.element("<iframe style='display:none' src=" + url + "></iframe>");
    e.load(function() {
        $scope.$apply(function() {
            $scope.exporting = false;  // this will remove the mask/spinner
        });
    });
    angular.element('body').append(e);
Run Code Online (Sandbox Code Playgroud)

这在Firefox中运行良好但在Chrome中没有运气.我也试过使用onload函数:

e.onload = function()  { //unmask here }
Run Code Online (Sandbox Code Playgroud)

但我也没有运气.

想法?

rtc*_*rry 22

很遗憾,onload如果内容是附件,则无法在Chrome中使用iframe 事件.这个答案可能会让您了解如何解决它.


小智 11

我讨厌这个,但除了每隔一段时间检查一次之外,除了检查它是否仍在加载之外,我找不到任何其他方法.

var timer = setInterval(function () {
    iframe = document.getElementById('iframedownload');
    var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
    // Check if loading is complete
    if (iframeDoc.readyState == 'complete' || iframeDoc.readyState == 'interactive') {
        loadingOff();
        clearInterval(timer);
        return;
    }
}, 4000);
Run Code Online (Sandbox Code Playgroud)

  • 这应该是直接下载的公认答案。我要添加的唯一部分是最大时间,因此它不会永远等待。 (2认同)