我正在编写一个指令,允许在每次更改元素内容时缩放内部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}}个引用,有两种情况正在发生:
page A
(URL1
的iframe)是page A
(与我的网站不一样)
域名),它会正常工作EXTERNAL URL
(URL1
的iframe)page A
(我的网站域名相同),则无效。 iframe的INTERNAL URL
事件永远不会在这种情况下触发。再次,
这发生在同一个域名网址上。答案 0 :(得分:0)
我网址中的哈希标记有问题。无法重新加载子iframe,因为除了哈希标记之后的后缀之外,它检测到的URL完全没有变化。如果我必须将其从c x
中移除,则可以使用
之前:
URL1
在
mydomain.net/page/#/pageA
mydomain.net/page/#/pageB