代码之家  ›  专栏  ›  技术社区  ›  user85461

jQuery用户界面对话框显示在框架内,来自bookmarklet?

  •  0
  • user85461  · 技术社区  · 15 年前

    我正在写一个书签,它需要在我无法控制其设计的页面的上下文中工作。我需要bookmarklet在使用框架(在框架集中)中运行的一些页面。jquery用户界面对话框是否可以在框架内工作?

    当前,当我遇到具有框架集的页面时,我创建的对话框如下:

    var frame = window.frames[0];
    var div = $(frame.document.createElement("div"));
    div.html("My popup contents");
    div.dialog( ... );
    

    结果是jquery将ui小部件div附加到主文档,而不是框架的文档。由于主文档只是一个框架集,因此不会显示任何内容。我在jquery ui api中找不到任何选项来指定应该在哪个文档中构建小部件。bookmarklet必须从外部文档的上下文中运行(或至少从外部文档的上下文中启动)。

    我知道不可能显示套印格式 over the frames 我对单帧显示很满意。还有,一些 other notable bookmarklets 无法在具有框架集的页上运行,因此这可能是一个常见问题。

    建议?

    2 回复  |  直到 15 年前
        1
  •  0
  •   mcandre    15 年前

    书签通常不使用jquery。大多数书签都会打开一个有jquery的窗口。

        2
  •  0
  •   user85461    15 年前

    这就是我最后所做的:我没有试图在一个框架内或框架上显示,而是让bookmarklet重写页面以删除框架集,并向页面添加我自己的正文和内容。这允许bookmarklet在移除框架集之前仍然内省框架并从中获取构建覆盖所需的数据,但允许覆盖仍然工作。

    像这样:

    if (window.frames) {
        for (var i = 0; i < window.frames.length; i++) {
            // ... grab data from the frame ...
        }
    }
    
    if ($("frameset")) {
        $("html").children("frameset").remove();
        document.body = document.createElement("body");
        $("html").append(document.body);
        // ... add my stuff to body ...
    }
    
    推荐文章