AngularJS Iframe包装iframe,子iframe无法打开相同的域URL

时间:2015-07-09 02:50:06

标签: javascript angularjs iframe

我正在编写一个指令,允许在每次更改元素内容时缩放内部iframe。 我的问题不是修改iframe或Same Origin策略问题中的内容。在某些情况下未加载第二个iframe。请仔细阅读下面的说明

<div my-directive>
<a class="box" href="javascript:void(0)">
<iframe fake-src="{{URL1}}" /> <!-- this iframe on fly -->
</a>
</div>

代码是:

app.directive('myDirective', function ($timeout, $sce, $timeout, ssHelper, ratchetService) {

return {
        restrict: 'A',
        link: function (scope, element, attrs) {
            scope.url = '';


            var url, boxElem;
            var loadOnce = false;
            scope.$watch(function(){  return element.html();  },
                function(elementBody, oldElementBody){
                    //console.log('trigger frame-matrix change', $(element) )
                    if(elementBody.trim() != ''){
                        //get the content under of the frame-matrix tag
                        boxElem = $(element).find('.box').eq(0);


                            var fakeIframe = $(element).find('iframe[fake-src]');

                            if(fakeIframe.length > 0){
                                var boxWidth = $(element).data('box-w');
                                var boxHeight = $(element).data('box-h');

                                var _url;
                                //if(scope.url != fakeIframe.attr('fake-src')){
                                    loadOnce = false; //prevent webkit load twice

                                    scope.url = fakeIframe.attr('fake-src')
                                    fakeIframe.removeAttr('fake-src')
                                    _url = $sce.trustAsResourceUrl(scope.url);

                                    fakeIframe.attr('src', _url)
                                    //fakeIframe.on('load', function () {
                                    fakeIframe.load(function () {
//something wrong happened and the code does not work in the case iframe of iframe

                                        if(!loadOnce){
                                            loadOnce = true;
                                            beautify(fakeIframe, boxWidth, boxHeight); // To make this short, I skip the beautify function code in this example
                                        }

                                    })
                                //}

                        }


                    }
            });


        }
    };
});

page A包含a iframe开放URL1正在使用上述指令,它运行正常。 我制作page B其中包含对iframe(first/parent iframe)的{​​{1}}个引用,有两种情况正在发生:

  1. 如果page AURL1的iframe)是page A(与我的网站不一样) 域名),它会正常工作
  2. 如果EXTERNAL URLURL1的iframe)page A(我的网站域名相同),则无效。 iframe的INTERNAL URL事件永远不会在这种情况下触发。再次, 这发生在同一个域名网址上。

1 个答案:

答案 0 :(得分:0)

我网址中的哈希标记有问题。无法重新加载子iframe,因为除了哈希标记之后的后缀之外,它检测到的URL完全没有变化。如果我必须将其从c x中移除,则可以使用

之前:

URL1

mydomain.net/page/#/pageA
mydomain.net/page/#/pageB