微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

(Confluence) 在 IFrame 的主体内获取一个 H1 元素 IFrame 限制示例

如何解决(Confluence) 在 IFrame 的主体内获取一个 H1 元素 IFrame 限制示例

背景

我正在尝试读取(并最终更改)嵌入在 Confluence 页面中的 body(在我的示例中这涉及 IFrame 标签)的 h1 中的内容.

融合行为

最初我认为这并不重要,但正如@Scottmarcus 的评论所说明的那样; 确实这项工作是否适用于可能的 Confluence 插件。这是因为我使用的 page decorator 包含在用户编辑 Confluence 页面时执行的 JavaScript。

IFrame 限制

这意味着(据我所知)在将可编辑的 IFrame 添加到 DOM 之后,我不能让 JavaScript 执行。这也意味着我无法控制将哪些内容添加IFrame(尽管这是可以/预期的,因为其想法是在他们添加表格并安装插件时增强用户体验)。

示例

作为参考,以下是 wysiwyg Confluence 编辑器在我的页面上的样子(用下面我的 HTML 中的几个关键元素进行了注释):

Confluence Editable IFrame

问题

虽然我已经能够读取/记录 IFrame 中存在的 HTML,但我似乎无法像在主 document 中那样访问元素。我在下面的内容上尝试了不同的变体,做诸如...

  • 通过 ID 选择元素——出于某种原因,这在这种情况下似乎不太可靠?
  • 尝试获取元素的 contents()children() -- 在许多情况下,我在尝试此操作时会遇到空引用异常
  • 从我的 body 对象访问 IFrame -- 同样,这似乎与执行 document.body 不同

JavaScript

function doStuff() {
    $('#wysiwygTextarea_ifr').ready(function () {
        let iFrame = document.getElementById('wysiwygTextarea_ifr');
        let frameDoc = iFrame.contentDocument ? iFrame.contentDocument : iFrame.contentwindow.document;
        let h1Tags = frameDoc.getElementsByTagName('h1');
        //would like to iterate over the collection of h1 tags here,but it always seems to be empty
    });
}

HTML

<!DOCTYPE html>
<html>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"
    integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
<script src="../Libraries/main.js" type="text/javascript"></script>

<script type="text/javascript">
    doStuff();
</script>

<iframe id="wysiwygTextarea_ifr">
  #document
    <!DOCTYPE html>
    <html>

    <head>
        <title>blah</title>
    </head>

    <body id="tinymce">
        <h1 id="meh">abcde table</h1>
        <h1 id="neh">zzz</h1>
    </body>

    </html>
</iframe>

</html>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。