FrameController.js

单页多框架窗口管理
授权协议 未知
开发语言 JavaScript
所属分类 Web应用开发、 常用JavaScript包
软件类型 开源软件
地区 国产
投 递 者 万俟超
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

项目介绍

优雅的处理单页多框架(<iframe>)窗口管理同步问题

消息数据结构

{
    event: '事件名称',
    type: 'child',
    target: '内嵌页的window',
    data: '传递的数据,即FrameController.broadcast(event, data)的data',
    frameId: '内嵌页标志'
}

使用说明

1、点击发送通知,所有打开的内嵌页都会受到通知。

基础事件

var addLog = function(from, event, data) {
    var _old = $('#log').html().substring(0, 3000);
    $('#log').html(
        (logTpl + _old)
        .replace('#EVENT#', event)
        .replace('#DATA#', JSON.stringify(data))
        .replace('#SOURCE#', from)
    );
    console.log('event:', event, 'data:', data);
};
 
//同步通知
FrameController.addListener('broadcast', function(e) {
    $('#msg').val(e.data.msg);
    addLog(e.frameId, e.event, e.data);
});
 
//发送广播
$('#send').click(function() {
    var nums = FrameController.broadcast('broadcast', {
        msg: $('#msg').val()
    });
    $('#log').html('通知成功:' + nums + '\n\n' + $('#log').html());
});
 
//更新输入状态
$('#msg').change(function() {
    FrameController.broadcast('change', {
        text: '输入框内容已更改:' + $(this).val()
    });
});
 
//更新状态
FrameController.addListener('change', function(e) {
    addLog(e.frameId, e.event, e.data);
});

2、新增 内嵌页,关闭内嵌页,可以通过:FrameController.addListener('frame.add',func)、FrameController.addListener('frame.remove',func) 进行监听

新开、关闭事件

//监听系统事件
var addLog = function(from, event, data) {
    var _old = $('#log').html().substring(0, 3000);
    $('#log').html(
        (logTpl + _old)
        .replace('#EVENT#', event)
        .replace('#DATA#', JSON.stringify(data))
        .replace('#SOURCE#', from)
    );
    console.log('event:', event, 'data:', data);
};
 
//监听系统事件
FrameController.addListener('frame.remove', function(e) {
    addLog(e.frameId, e.event, e.data);
});
FrameController.addListener('frame.add', function(e) {
    addLog(e.frameId, e.event, e.data);
});

3、可以对一个事件增加多个监听方法,可以删除所有监听方法、删除某一个监听方法

事件添加和删除

var logTpl = '事件:#EVENT# 来源:#SOURCE#\n数据:#DATA#\n\n',
    addLog = function(from, event, data) {
        var _old = $('#log').html().substring(0, 3000);
        $('#log').html(
            (logTpl + _old)
            .replace('#EVENT#', event)
            .replace('#DATA#', JSON.stringify(data))
            .replace('#SOURCE#', from)
        );
        console.log('event:', event, 'data:', data);
    },
    msgEventListener = function(e) {
        $('#log').html('自定义事件已经触发,添加多次会触发多次\n\n' + $('#log').html());
    };
 
 
//添加自定义事件
$('#add_custom').click(function() {
    FrameController.addListener('broadcast', msgEventListener);
});
 
//删除自定义事件
$('#remove_custom').click(function() {
    FrameController.removeListener('broadcast', msgEventListener);
});

更多说明请访问:http://www.miaoqiyuan.cn/p/framecontroller-js

 相关资料
  • 本文向大家介绍emacs 多个窗口或框架,包括了emacs 多个窗口或框架的使用技巧和注意事项,需要的朋友参考一下 示例 Emacs中的“窗口”指的是否则称为“窗格”或“屏幕划分”的内容。一些窗口操作命令包括: 水平分割当前窗口: C-x 2 垂直拆分当前窗口: C-x 3 选择下一个窗口: C-x o 关闭当前窗口: C-x 0 关闭所有其他窗口,但当前窗口除外: C-x 1 Emacs中的“框

  • 问题内容: 我有这个网页,我想使其自动化。这是应用程序的步骤和功能。 使用Selenium启动应用程序 单击某些按钮后,将在主页上弹出一个框架 我可以通过硒Web驱动程序在框架上执行操作 但同一框架中有一个日历图标。 单击日历图标后,将弹出一个带有日历和“确定”按钮的弹出窗口。 我可以在弹出窗口中选择日期,然后单击“确定”按钮,弹出窗口会自动关闭。 现在,我想再次切换到FRame来执行进一步的操作

  • Qt 的 QMainWindow 类提供了一个应用程序主窗口,包括一个菜单栏( menu bar)、多 个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)以及一个 中心部件(central widget),常见的一种界面布局如图 8-1 所示。 图 8-1 Qt 主窗口常见布局示意图 绝大多数现代 GUI 应用程序都会提供一些菜单、上下文菜

  • 问题内容: 运行以下代码: 结果是: 上面的代码中没有定义任何窗口框架,它看起来默认的窗口框架是 不确定我对默认窗口框架的理解是否正确 问题答案: 从Spark Gotchas 默认帧规格取决于给定窗口定义的其他方面: 如果指定了ORDER BY子句,并且该函数接受了帧规范,则该帧规范是由RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW定义的, 否

  • 本文向大家介绍C++之CWnd窗口框架实例,包括了C++之CWnd窗口框架实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了CWnd窗口框架,分享给大家供大家参考。具体分析如下: .h头文件代码如下: .cpp源文件代码如下: 希望本文所述对大家的C++程序设计有所帮助。

  • 没有工具栏或任何边框仅纯内容的窗口. 创建无框窗口 在 BrowserWindow的 options中设置 frame 为 false 即可创建无框窗口. 1 const {BrowserWindow} = require('electron') 2 let win = new BrowserWindow({width: 800, height: 600, frame: false}) 3 win