angularjs - 使用 Angular Directive 在 iF​​rame 上拖放

标签 angularjs jquery-ui iframe jquery-ui-draggable jquery-ui-droppable

我需要一些控件来在 iFrame 上进行拖放操作。我需要 iframe 中的功能的原因是因为它是我们正在构建的 CMS,并且“编辑页面”中的任何“绝对”CSS 更改也会影响主站点。

我已经编写了一个 Angular 指令并为此构建了一个小型原型(prototype),只要它在同一页面上它就可以完美工作,但是当我尝试跨 iframe 执行相同操作时,它就不起作用了。即使从 iFrame 页面注册 droppbale 也不会显示在控制台中(当尝试通过指令登录时)。

它是 1 个寻呼机代码,可在此处查看 - http://78.110.163.229/angDnd/outer.html

任何指导/建议都会非常有帮助。

最佳答案

看起来iframe的主体实际上从未被制成可删除。 正文中有这么一段代码:

$(function () {
    $("#canvas-frame").ready(function (){
        var contents = $("#ifr").contents();
        var ifrBody = contents.find('body');
        //console.log(ifrBody);
        $(ifrBody).attr("dnd-droppable","true");
    })
});

(其中一些)问题如下:

  1. 我没有看到任何 #canvas-frame 元素。

  2. 即使有一个这样的元素,dnd-droppable 属性也会在 after Angular 之后添加到 iframe 的主体中已经解析了 DOM,所以根本不考虑它。


解决方案:

在 HTML 中,在 iframe 元素上添加新指令:

<iframe id="ifr" src="inner.html" dnd-droppable-iframe></iframe>

在您的 JS 中,定义新指令,以便它等待加载 iframe,然后将 dndDroppable 指令添加到其 body 元素并编译它,所以Angular 可以“捡起它”:

dndApp.directive('dndDroppableIframe', function ($compile) {
    return {
        restrict: 'A',
        link: function(scope, elem, attrs) {
            if (elem.prop('tagName') !== 'IFRAME') { return; }

            elem.ready(function () {
                var ifrBody = elem.contents().find('body');
                ifrBody.attr('dnd-droppable', '');
                $compile(ifrBody)(scope);
            });
        }
    };
});

关于angularjs - 使用 Angular Directive 在 iF​​rame 上拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21067030/

相关文章:

java - 当显示表而不是显示 NULL 时,字段应该为空。我们可以通过 SQL 或 angularjs 来做到这一点吗?

jquery - 当我们关闭叠加层时,YouTube 视频不会停止

javascript - jQuery - 任何时候只显示一个 div

jquery - Select2控件,允许多次选择相同的值

jquery - 更改ajax上的iFrame src完成

javascript - 是否可以将动态 React 组件嵌入到单独的 html 文件中,而无需下载文件或使用服务器?

javascript - 将参数传递给 ng-model?

angularjs - ionic - 如何在侧边菜单中创建小图标?

javascript - 如何使用 X-Frame-Options SAMEORIGIN 对来自同一域的页面进行 iframe?

Node.js:http.js:691 抛出新错误 ('Can\' t 在发送后设置 header 。')