处理 IE 中的跨帧按键

2023-12-09

我一直在努力处理onkeydown通过 JavaScript 跨多个框架的事件(不,不幸的是我无法摆脱框架)(请参阅我之前的问题here)。我正在另一个框架中获取文档的句柄,并将其设置为onkeydown处理程序等于我的函数。没有抛出错误,但是当我稍后检查文档的设置时,onkeydown一片空白。我得到了相同的结果IE6 and IE7。我究竟做错了什么?

  • Function

     function setKeyHook(doc)
     {
         try{               
             if (doc)
                 if (parent.TOP.handleKeypress){
                     doc.onkeydown = parent.TOP.handleKeypress;
                     logMessage('Attached handler');
                 }
                 else{
                     logMessage('No handleKeypress');
                 }
             else
                 logMessage('No doc');
         }
         catch (ex){
             logMessage(ex.toString());
         }
     }
    
  • Call

setTimeout("setKeyHook(parent.document.getElementById(\"bottom\").document);", 1000);
  • Output


   Attached handler
  
  • 执行后


    BOTTOM.protocol = HyperText Transfer Protocol
    BOTTOM.onkeypress = null
    BOTTOM.onrowenter = null
    BOTTOM.onmousedown = null
  

我应该如何跨框架应用相同的事件处理程序?

注意:这需要在 IE6 和 IE7 中工作(并且仅工作)。


我让这个工作

框架集.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
    <title>Test</title>
</head>
<frameset rows="50%,50%">
    <frame src="frame1.html" name="TOP">
    <frame src="frame2.html" name="BOTTOM">
</frameset>
</html>

框架1.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
    <title>Frame 1</title>
    <script type="text/javascript">
    onload = function()
    {
        top.frames.BOTTOM.document.onkeydown = 
        self.document.onkeydown = function( evt )
        {
            return function()
            {
                // Just an example to show it's working
                document.getElementById( 'output' ).value += String.fromCharCode( evt.keyCode );
            }
        }( window.event );
    }

    </script>
</head>
<body>
    frame1
    <textarea id="output"></textarea>  
</body>
</html>

框架2.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
    <title>Frame 2</title>
</head>
<body>
    frame2
    <textarea></textarea>
</body>
</html>

首先,相当明确地表达对象引用总是值得的。使用专有的 DOM 快捷方式(例如 window.框架名称)只是增加不必要的潜在错误。这就是为什么我的脚本明确地查找frames窗口对象的集合。

接下来是在处理框架集时熟悉 DOM 中的各种内置窗口引用。共有4个

  1. window- 当前窗口。当省略时也暗示这一点(即 window.onload === onload)
  2. parent- 父窗口到当前窗口
  3. top- 框架集系列中最顶层的窗口。parent === top当你只有一个框架集时。
  4. self- 别名window

所以基本上我在这里所做的是,当 onload 事件在 Frame1 窗口中触发时,为两个框架窗口中的文档的 keydown 事件添加一个处理程序函数。

该函数使用闭包来确保在frame1中生成的事件对于实际处理程序是可用的,无论哪个窗口生成了keydown事件。这是必要的,因为 IE 处理事件的方式。其他浏览器在事件发生时创建新的事件对象并将它们传递给事件处理程序,而 IE 只是修改全局事件对象(通过引用)窗口事件或者更简单,只是event) 来反映当前事件。

我希望这是有道理的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理 IE 中的跨帧按键 的相关文章

  • 将鼠标悬停时的鼠标光标更改为锚状样式

    如果我将鼠标悬停在div鼠标光标将更改为 HTML 锚点中的光标 我怎样才能做到这一点 假设你的div has an id myDiv 将以下内容添加到您的 CSS 中 这cursor pointer指定光标应与用于锚点 超链接 的手形图标
  • JavaScript 中的埃拉托斯特尼筛法对大量数据无限运行

    我一直在尝试写埃拉托斯特尼筛法 http en wikipedia org wiki Sieve of EratosthenesJavaScript 中的算法 基本上我只是按照以下步骤操作 创建从 2 到 n 1 的连续整数列表 令第一个素
  • 为什么我的淘汰单选按钮在另一个具有点击绑定的元素内时会失败?

    我有一个单选按钮列表 我想要点击 li 他们还检查单选按钮 这一切都有效 直到我放了一个name单选元素上的属性 然后我的代码停止工作 我的代码如下所示 ul li li ul li
  • 是否存在 IsCallable 为 false 但 IsConstructor 为 true 的 JS 对象?

    ECMAScript 规范函数可调用 https www ecma international org ecma 262 6 0 index html sec iscallable当且仅当其参数具有 Call 内部方法时返回 true 它在
  • 为什么 iife 在一个简单的例子中不起作用?

    我不明白为什么函数表达式调用不起作用并抛出错误 你能给我解释一下吗 var a function x alert x function a 1 谢谢大家 任务比我想象的要容易得多 这是因为 JS 将 IIFE 解析为函数的参数调用 这样做时
  • Chrome 中的性能问题

    我目前正在从事一个相对较大的项目 使用 AngularJs 构建 应用程序的一部分是一个表单 您可以向其中添加任意数量的页面 不幸的是 添加了很多不必要的垃圾 即表示表单模型的对象可能会变得非常大 在某些时候 Chrome 基本上无法处理它
  • 如何将内联 JavaScript 与 Express/Node.js 中动态生成的内容分开?

    对于具有几年 Web 开发经验但没有找到答案的人来说 这是一个有点菜鸟的问题程序员堆栈交换 or Google 我决定在这里问一下 我在用Express网络框架Node js 但这个问题并不特定于任何 Web 框架或编程语言 以下是从数据库
  • 有没有办法使用 Rspec/Capybara/Selenium 将 javascript console.errors 打印到终端?

    当我运行 rspec 时 是否可以让 capybara selenium 向 rspec 报告任何 javascript console errors 和其他异常 我有一大堆测试失败 但当我手动测试它时 我的应用程序正在运行 如果不知道仅在
  • 将 GMT 时间转换为当地时间

    我以这种格式从我的服务器获取 GMT 时间 Fri 18 Oct 2013 11 38 23 GMT 我的要求是使用Javascript将此时间转换为本地时间 例如 如果用户来自印度 首先我需要采用时区 5 30并将其添加到我的服务器时间并
  • Chrome 扩展程序在代码中使用 client_secret

    我正在开发具有自己的 oAuth 授权的 Google Chrome 扩展 当然 我必须使用 client id 和 client secret 作为请求令牌 有什么办法可以向用户隐藏这些数据吗 由于此请求只是 javascript 源代码
  • 将 UMD Javascript 模块导入浏览器

    你好 我正在对 RxJS 进行一些研究 我可以通过在浏览器中引用它来使用该库 如下所示 它使用全局对象命名空间变量 Rx 导入 我可以制作可观察的东西并做所有有趣的事情 当我将 src 更改为指向最新的 UMD 文件时 一切都会崩溃 如下所
  • 可以设置标题样式吗? (并且使用CSS或js?)[重复]

    这个问题在这里已经有答案了 我想知道是否可以设计一个title a href title This is a title Hello a 样式问题有两个方面 文本格式 编码 我猜这是可能的 所以在问题中这样做 工具提示样式 你能把它弄大一点
  • 在移动设备上滚动

    这个问题更多的是一个建议研究 我确实希望它对其他人有帮助 并且它不会关闭 因为我不太确定在哪里寻求有关此事的建议 在过去的 6 个月里 我一直在进行移动开发 我有机会处理各种设备上的各种情况和错误 最麻烦的是滚动问题 当涉及到在网站的多个区
  • 使用 Vue 的多模式组件

    我在 Vue 中实现动态模式组件时遇到问题 A common approach I follow to display a set of data fetched from the db is I dump each of the rows
  • Javascript - 水波纹效果

    我需要 JS 上的脚本 它将以 水波纹 样式更改 images html 抱歉 6MB GIF 文件 http fcuunited ru temp listening2 gif http fcunited ru temp listening
  • 在 CKEditor 中设置字体大小和字体系列

    我正在使用 ckeditor 我想问一下这个插件如何设置font family和font size 我尝试过使用 CKEDITOR config font defaultLabel Arial CKEDITOR config fontSiz
  • Jquery - 选择选项后如何获取选项的特定数据类型?

    我将直接跳到标记 然后解释我想要做什么 HTML 选择选项
  • 如何确定所有角度2分量都已渲染?

    当所有 Angular2 组件完成渲染时 是否会触发一个角度事件 For jQuery 我们可以用 function 然而 对于 Angular2 当domready事件被触发 html 只包含角度组件标签 每个组件完成渲染后 domrea
  • 如何在执行新操作时取消先前操作的执行?

    我有一个动作创建器 它会进行昂贵的计算 并在每次用户输入内容时调度一个动作 基本上是实时更新 但是 如果用户输入多个内容 我不希望之前昂贵的计算完全运行 理想情况下 我希望能够取消执行先前的计算并只执行当前的计算 没有内置功能可以取消Pro
  • 如何使用asm.js进行测试和开发?

    最近我读到asm js规范 看起来很酷 但是是否有任何环境 工具来开发和测试这个工具 这还只是处于规范阶段吗 您可以尝试使用 emscripten 和 ASM JS 1 并从侧分支在 firefox 构建中运行它 有关 asm js 的链接

随机推荐

  • 什么是“根引用”?

    引用自 在 C 中安全 在 C 中不安全 简单返回指针 引用 答案 3 埃里克 利珀特 Eric lippert 另请注意 并不是对 Person 对象的任何引用使其保持活动状态 引用必须是 root 的 您可以有两个相互引用但无法访问的
  • Makefile 致命错误:无法创建 obj/calc.o

    我正在尝试为大学项目的简单计算器制作一个生成文件 我需要完成它 我在网上搜索了教程 最终找到了这段代码 IDIR include CC gcc CFLAGS I IDIR ODIR obj LDIR lib SDIR src LIBS lm
  • Swift 3:UITableViewRowActionStyle()“缺少参数”错误消息

    当我滑动 UITableView 单元格时 将调用以下代码 func tableView tableView UITableView editActionsForRowAt indexPath IndexPath gt UITableVie
  • 在 blueimp/jquery-file-upload 上向 mysql 插入添加更多自定义变量

    我目前正在通过 mysql 在 blueimp jquery file upload 脚本内插入标题和描述 我用了this但是 我需要添加另一个变量 该变量是当前登录用户的session ID SESSION userid 我想将其插入到我
  • MVC3 - 只有第一行链接适用于 Jquery 模态对话框

    使用 MVC3 Razor Jquery Javascript 下面的代码循环并显示带有字段和链接的表结构 每行上的链接都会触发一个 Jquery 模态对话框 该对话框将部分视图页面显示为弹出窗口 但弹出对话框仅适用于第一行 第二行及其下方
  • 云函数-获取超过10MB的文件内容

    Google Cloud Functions 配额页面 https cloud google com functions quotas表示 HTTP 响应中 HTTP 函数发送的最大数据量为 10 MB 我在 Google 存储桶中有 10
  • 用于算术运算的 BFS

    用最少的运算将数字 m 转换为 n 允许的运算为减 1 和乘 2 例如 4 和 6 答案是 2 第一个操作 1 gt 4 1 3 第二次操作 gt 3 2 6 我对特定输入 src 26 dst 5 使用 BFS 方法 这需要很长时间 难道
  • 使用 Lua 评估数学表达式

    In my 上一个问题我一直在寻找一种在 C 语言中评估复杂数学表达式的方法 大多数建议都需要实现某种类型的解析器 However 一个答案 建议使用 Lua 来计算表达式 我对这种方法很感兴趣 但我对Lua一无所知 有 Lua 经验的人可
  • 将给定坐标处的饼图添加到 cartopy 投影

    我是数据可视化的初学者 对于 cartopy 更是如此 我知道对于大多数人来说我的问题是显而易见的 我正在尝试熟悉 cartopy 并且成功地绘制了文本和点 但我无法实现饼图 我只想在特定投影上绘制饼图 但我真的很困惑 尽管有 cartop
  • 使用 PyAudio 防止 ALSA 欠载

    我编写了一个小程序 它记录麦克风的声音并将其通过网络发送并在那里播放 我正在使用 PyAudio 来完成此任务 它工作得几乎很好 但在两台计算机上我都从 ALSA 收到错误 表明发生了欠载 我在谷歌上搜索了很多相关内容 现在我知道什么是欠载
  • 如何通过网络使用命名管道?

    我正在尝试通过命名管道创建网络连接 我正在按照它所说的那样做msdn 我用函数创建管道服务器端 CreateNamedPipe pipe myNamedPipe DUPLEX FILE FLAG OVERLAPPED 0 255 BUFFE
  • 等待其他期货提出的期货

    我正在使用 Lawndart 库访问浏览器数据 并希望收集一组查询的结果 这是我认为应该起作用的 numberOfRecordsPerSection callback var map new Map db sections keys for
  • 使用 LINQ 计算与前一项的差异

    我正在尝试使用 LINQ 为图表准备数据 我无法解决的问题是如何计算 与之前的差异 我期望的结果是 ID 1 日期 现在 DiffToPrev 0 ID 1 日期 现在 1 DiffToPrev 3 ID 1 日期 现在 2 DiffToP
  • nltk 无法解释斯坦福解析器输出的语法类别 PRP$

    我想从斯坦福解析器检索的语法生成句子 但 NLTK 无法解释 PRP from nltk parse stanford import StanfordParser from nltk grammar import CFG from nltk
  • 在大端机器中对小端整数进行简单的按位操作?

    对于特定需求 我正在用四个一字节字符构建一个四字节整数 没有使用任何特别的东西 在我的小端平台上 return v1 lt lt 24 v2 lt lt 16 v3 lt lt 8 v4 我知道存储在大端机器中的整数看起来像AB BC CD
  • 单击 JPanel 绘制形状

    我有一个包含 3 个 JPanel 的 JFrame 选项 菜单 画布 在选项中有许多代表形状的 JButton 目的是单击形状的 JButton 例如矩形 然后单击画布上的任意位置 形状将绘制在那里 由于某种原因 形状并不总是被绘制 只有
  • C# 打开文件并传递参数给关联的应用程序

    我正在尝试启动为指定附加参数的扩展注册的默认应用程序 ProcessStartInfo p new ProcessStartInfo p Arguments myargument p FileName file ext Process St
  • Symfony2 - 覆盖模板包

    我想覆盖默认的 SonataAdmin 模板 我在我的命名空间 bundle resources views中创建了一个standard layout html twig 相同结构 相同文件名 相同内容 我将源模板的所有内容复制到目标模板中
  • MongoDB:有没有办法使用聚合来检测价值趋势?

    我正在尝试检测集合中值的 趋势 假设我有以下内容 created at 2014 12 01 value 1015 created at 2014 12 01 value 1015 created at 2014 12 01 value 1
  • 处理 IE 中的跨帧按键

    我一直在努力处理onkeydown通过 JavaScript 跨多个框架的事件 不 不幸的是我无法摆脱框架 请参阅我之前的问题here 我正在另一个框架中获取文档的句柄 并将其设置为onkeydown处理程序等于我的函数 没有抛出错误 但是