Ios 嵌入iframe时HTML5游戏触摸问题
我正在尝试将HTML5游戏嵌入iFrame中,以便在iPad和iPhone等移动设备的浏览器中显示 如果你直接在iPad上访问它们,它们可以正常工作 但是如果你使用iframe嵌入它们,那么当你触摸游戏然后放开时,游戏会暂停 有没有一种方法可以阻止这种iframe行为,从而让他们按照应有的方式行事 当你停止触摸时,你的注意力似乎消失了,它认为是你的空虚和停顿 示例 在emulator中尝试下面的两个示例链接,您将看到问题Ios 嵌入iframe时HTML5游戏触摸问题,ios,css,html,iframe,embed,Ios,Css,Html,Iframe,Embed,我正在尝试将HTML5游戏嵌入iFrame中,以便在iPad和iPhone等移动设备的浏览器中显示 如果你直接在iPad上访问它们,它们可以正常工作 但是如果你使用iframe嵌入它们,那么当你触摸游戏然后放开时,游戏会暂停 有没有一种方法可以阻止这种iframe行为,从而让他们按照应有的方式行事 当你停止触摸时,你的注意力似乎消失了,它认为是你的空虚和停顿 示例 在emulator中尝试下面的两个示例链接,您将看到问题 iPhone/iPad模拟器: 直接游戏链接(游戏作品): 嵌入式游戏链
- iPhone/iPad模拟器:
- 直接游戏链接(游戏作品):
- 嵌入式游戏链接(游戏不工作):
游戏
我尝试过的
更改交互类型的css样式
<div style="overflow:auto;-webkit-overflow-scrolling:touch;">
<iframe src="" height="" height=""></iframe>
</div>
JS可以防止默认设置
<script>
document.ontouchmove = function(e) {
e.preventDefault();
};
</script>
document.ontouchmove=函数(e){
e、 预防默认值();
};
。。。目前,他们都没有帮助面对同样的问题。似乎只有Safari在谷歌Chrome三星Galaxay S4上以这种方式运行 更新: 我认为这个问题不能从一个游戏网站上解决。到目前为止,我在深入研究材料时发现:如果您将此添加到代码中 例如CSS:
body{
-ms-touch-action: none;
touch-action: none;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
或/和Javascript
document.addEventListener('ontouchstart', function(e) {e.preventDefault()}, false);
document.addEventListener('ontouchmove', function(e) {e.preventDefault()}, false);
在“iframed游戏”中,它将起作用并阻止这种行为(例如:touchmoves、touchCroll等所有使游戏失去焦点的事情)。
但是iframe中的所有内容都遵守那里的代码规则,如果我们尝试将其添加到iframe网格中,似乎无法阻止
我能想到的唯一解决办法是用更高的z索引覆盖一个绝对不可见的div,并尝试向其添加功能。但我认为在这种情况下,游戏不会再对触摸做出反应。IDK…怎么办:
您可以将以下内容添加到游戏页面的HTML中:
<body onload="init()">
在游戏页面上添加以下JS
window.init = function() {
window.parent.frameRegister(window.frameElement.id);
}
在容器页面中,在JS中定义frameRegister
:
var frame;
window.frameRegister = function(frameId) {
frame = window.frames[frameId];
}
所有这些都是在两个帧之间建立一种通信方式。我们将在下一节的后面部分使用它在顶级帧和目标帧之间适当地传递事件
然后我们将强制将这些事件推送到子容器中相应位置的适当元素
父文档上的(您的iframe
容器)
添加这个JS
var touchEvents = ['start', 'move', 'enter', 'leave', 'cancel', 'leave']; // Make this whichever events you want to pass
for (i = 0, l = touchEvents.length; i<l; i++) {
document.addEventLister('touch' + touchEvents[i], function(e) {
e.preventDefault();
frame.document.elementFromPoint(e.pageX, e.pageY);.dispatchEvent(e);
}
}
var touchEvents=[“开始”、“移动”、“输入”、“离开”、“取消”、“离开”];//无论你想通过哪个项目,都要进行此操作
对于(i=0,l=touchEvents.length;我看到了这些答案,还有这个答案
var frame;
window.frameRegister = function(frameId) {
frame = window.frames[frameId];
}
var touchEvents = ['start', 'move', 'enter', 'leave', 'cancel', 'leave']; // Make this whichever events you want to pass
for (i = 0, l = touchEvents.length; i<l; i++) {
document.addEventLister('touch' + touchEvents[i], function(e) {
e.preventDefault();
frame.document.elementFromPoint(e.pageX, e.pageY);.dispatchEvent(e);
}
}