JavaScript用于新标签页(CTRL+T)、新窗口(CTRL+N)吗?

7
当 Flash 获得键盘焦点时,CTRL+T(新建标签页)和 CTRL+N(新建窗口)会被 Flash 拦截。
有没有方法将这些事件传递给浏览器,使它们起作用(打开新的标签页、打开新的浏览器)?或者有没有 JavaScript 命令可以执行这些操作?

我一直想问这个问题,而你替我解答了。谢谢。 - mati
2个回答

2
这是Flash和浏览器之间长期存在的问题。(我指的是很长时间——请看Mozilla浏览器上这个八年前的bug。)问题在于Flash截获了所有输入事件,而不是浏览器。它被隔离在自己的环境中,并且不会将事件传递回浏览器。
从概念上讲,这并不一定是坏事。当Flash想要监听ctrl+n事件时会发生什么?浏览器应该因为已经使用了这个快捷键而将焦点从Flash移开吗?对于Flash开发人员来说,这肯定是一个真正的烦恼。
我见过一些针对特定浏览器解决此问题的提议,但没有普适的解决方案。例如,这个解决方案在bug中被引用,但显然不会按你想要的方式工作(因为用户需要跨越很多障碍才能使其工作)。
所以...暂时还没有。如果能解决这个问题就太好了。

1
“浏览器是否应该因为已经使用了热键而将焦点从Flash中移开?” — 是的!Flash是浏览器“房子”中的“客人”。而且是一个特别行为不端的客人。 :-) - Ben Blank
哈哈哈,我以前从没听说过用“客人类比”来描述插件,这真的很棒。 - Dan Lew

1

最接近的方法是让ActionScript触发Javascript打开一个空白窗口到一个空白URL

// We abstract it in a function here in case we want to
// change it later
function openBlankWindow()
{
   window.open( '' );
}

对于大多数人来说,这将启动一个新窗口或新选项卡(取决于他们的浏览器首选项),但由于它是由网页发起的,可能会受到弹出窗口拦截器的限制。
实际上没有办法要求浏览器专门执行您所要求的两个任务之一。如果网页具有执行此操作的权限/特权,那将是一个安全/烦恼的噩梦。

我认为他并不想让Flash访问浏览器,而是希望在Flash内部也能正常使用浏览器功能。 - Dan Lew
我知道这一点,这就是为什么我说的第一件事是“最接近你能得到的”。允许关键命令从Flash电影冒泡到浏览器是只有Adobe才能解决的问题。 - Peter Bailey
我在回应你最后一段,而不是其他内容 - 其他内容对我来说是有意义的。 - Dan Lew
Peter Bailey 的观点基本上是正确的。但他没有给出太多例子。希望下面的例子能帮助人们在我们的应用程序中加入这样的功能。也许通过一些努力,我们可以编写一个类来复制大部分浏览器功能。至少所有可以通过 JavaScript 复制的功能都可以。然后将其包含在我们的应用程序中。http://thesaj.wordpress.com/2009/12/05/how-to-enable-cntrl-t-tab-in-flash/ - user225606

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接