我有一个用户可以玩Flash游戏的网页。我们现在对页面进行一些更改,要求将游戏嵌入wmode=transparent
或wmode=opaque
,以便我们可以在Flash游戏的顶部显示HTML元素。问题是,在Internet Explorer(所有版本)中,如果用户按下向上/向下箭头键,则整个页面会滚动。我已经尝试了所有我能想到的东西,并且我花了一整天时间寻找解决方案而没有成功。
到目前为止,我已经尝试将游戏放入iframe中,我尝试用JS禁用向上/向下键,但没有一个能解决我的问题。
要求是:wmode必须是transparent
或opaque
而我无法修改Flash游戏。
答案 0 :(得分:1)
在Flash中使用wmode=transparent
时阻止滚动的唯一方法是阻止使用整个页面的箭头键滚动。 This page最好地总结了它。
基本上,当transparent
模式处于活动状态时,IE中的键盘事件会传播到浏览器;我不知道如何防止滚动(尚未测试),但你基本上必须全局阻止键盘滚动。
This discussion强调了IE8的可能解决方法,以及使用jQuery here实现的示例。我现在没有IE的副本,但可能值得一试。
但是,在AFAIK中,Flash中的游戏通常与wmode=transparent
的效果不佳,因为无需用户交互就可以窃取焦点。您最好的选择是重新编辑页面,以免要求Flash使用HTML叠加(即使YouTube避免在其页面上设置transparent
,并且他们拥有整个内容。)
答案 1 :(得分:0)
在拦截任何关键操作之前,用户需要先关注Flash影片。这实际上是一种很好的行为,不应该改变。
以某种方式要求用户自愿聚焦电影是个好主意,也许可以在它上面放一个他们需要先点击的开始按钮。然后应将所有关键操作发送到Flash。
答案 2 :(得分:0)
一些JS魔法怎么样,如果有效的话。
http://api.jquery.com/keypress/
http://api.jquery.com/event.preventDefault/
在object / embed标签上注册KeyPress事件处理程序。假设你有一个id为#flashobj
的flash对象$('#flashobj')。keypress(function(event){event.preventDefault();});
或者,更棘手的是,如果flash对象/ embed上的绑定不起作用,你可以在整个窗口绑定按键,并检查以下内容:
if(event.target.tagName.toLower()==“object”)...
里程可能会有所不同,因为我记得event.target不太可靠......
希望flash会捕获键盘事件,页面会忽略它。我知道你说你试过了,但你的方法可能有所不同(我提出了两种截然不同的方法,一种可能有用)
答案 3 :(得分:0)
似乎没有办法解决这个问题。我们将不得不接受这样的事实:HTML内容(我们的情况下像聊天这样的FB)会隐藏在Flash游戏背后。
但我仍然希望有人证明我错了:)