【发布时间】:2017-07-20 18:21:09
【问题描述】:
当我想访问动态生成的 iframe 源中的 DOM 元素时,我的浏览器会阻止我访问它,就像从不同位置加载 iframe 的情况一样。有没有办法告诉 iframe 元素它的“src”属性是自制的?在代码中:
在html中:
<div ng-app="myApp" ng-controller="MyController as ctrl">
<iframe id="my-iframe" ng-src="{{ctrl.renderIframe()}}"></iframe>
</div>
角度:
var myApp = angular.module('myApp', []);
myApp.controller('MyController', ['$sce', function($sce) {
var self = this;
var iframeContent = 'data:text/html;charset=utf-8,' + encodeURI(
'<div id="target">Shoot the target</div>'
);
var iframePointer = angular.element('#my-iframe');
var targetPointer;
self.renderIframe = function() {
return $sce.trustAsResourceUrl(iframeContent);
};
/* Edit: needed a [0] selector */
iframePointer[0].onload = function() {
targetPointer = iframePointer.contents().find('#target');
targetPointer.text('I shot it');
};
}]);
【问题讨论】:
-
您是否尝试过使用外部源,只是为了看看它是否有效?
-
你的意思是仅仅引用像 ng-src="some.other-address.co.uk" 这样的东西?当然可以获取不同的位置,但问题是一样的:禁止尝试使用 javascript 读取/写入 iframe 中的单个元素,因为它的来源不同。
-
我的意思是不要在 Angular 中动态生成源代码,而是创建一个包含
<div id="target">Shoot the target</div>的新 HTML 文件,并将其用作同一来源的源代码,然后查看您要执行的操作是否有效。 -
啊这样。是的,这确实有效,尽管我必须承认我忘记在 onload 事件处理函数之前放置一个 [0] 选择器。再次从生成的 src 中获取它仍然会抛出“来自 'HTMLIFrameElement' 的属性:阻止具有源“localhost”的框架访问跨域框架。”错误。
-
您是否有需要 iframe 的理由?为什么不直接将 html 附加到主文档?
标签: javascript jquery html angularjs iframe