【问题标题】:determine the frame id/name when a user has selected text in that frame- the page has multiple frames当用户在该框架中选择文本时确定框架 ID/名称 - 页面有多个框架
【发布时间】:2011-12-10 02:05:09
【问题描述】:

我有一个场景,其中在一个网页中打开了多个 iframe/框架。现在用户可以在任何一个打开的框架/iframe 中选择一些文本。我想确定用户选择文本的 iframe 的 ID/名称,然后使用 iframe id/名称对所选文本进行一些操作。

我该怎么做?

【问题讨论】:

    标签: javascript iframe frame


    【解决方案1】:

    这将获得当前文档中具有非空选择的第一个 iframe。如果 iframe 来自另一个域,因此在当前文档中运行的 JavaScript 无法访问,则无法检索所选内容并忽略 iframe。

    function getSelectedText(win) {
        var sel;
        if (win.getSelection) {
            return "" + win.getSelection();
        } else if ( (sel = win.document.selection) ) {
            if (sel.type == "Text") {
                return sel.createRange().text;
            }
        }
        return "";
    }
    
    function getIframeWithSelection(win) {
        var iframes = win.document.getElementsByTagName("iframe");
        for (var i = 0, len = iframes.length, selectedText; i < len; ++i) {
            try {
                selectedText = getSelectedText(iframes[i].contentWindow);
                if (selectedText != "") {
                    // alert just there for debugging
                    alert(selectedText);
                    return iframes[i];
                }
            } catch (e) {}
        }
        return null;
    }
    
    // Example
    var iframe = getIframeWithSelection(window);
    

    【讨论】:

    • 如果只有 Arvind 进行了一些搜索并发现您的 tim-down 的其他答案很大程度上基于相同的问题 stackoverflow.com/questions/1471759/…,这是一个很好的解决方案
    • @TimDown-我正在尝试在 google chrome 扩展程序中使用您的函数(如上所示)-问题是在该扩展程序中,您的函数被加载到“背景页面”中。有什么方法可以指定窗口(必须检查哪些 iframe?)...也许将该主窗口的标题作为参数传递给您的函数,以便您的函数随后在指定的窗口中查找 iframe标题?还是其他方式?谢谢...
    • @Arvind:我没有对 Chrome 扩展做任何事情,但是代码中有一个小错误,我现在已经更正了:它现在只在指定的窗口中查找 iframe 元素(@ 987654323@)。这有帮助吗?
    • @TimDown-我更改了 chrome 扩展名-我使用包含您的代码的 js 文件作为内容脚本的一部分(这是直接注入到页面中)-完成了我想要的工作...谢谢!
    猜你喜欢
    • 2016-02-14
    • 2021-04-02
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多