Javascript iOS 8和mobile Safari(7+):未触发svg事件

Javascript iOS 8和mobile Safari(7+):未触发svg事件,javascript,events,svg,mobile-safari,ios8,Javascript,Events,Svg,Mobile Safari,Ios8,随着iOS8的最新更新,我们主要在iPad上运行的webapp已经崩溃 更具体地说,这个问题发生在SVG和应该触发而不是的事件上 我们使用SVG作为映射,g和polyfill标记作为标识符。这在iOS7和所有桌面浏览器中都能正常工作。事实上,它甚至可以在iOS8附带的Safari 8中工作。当应用程序被添加到主屏幕时,Safari版本将变为7+,根据platform.version 以下是我们要添加到svg文档中的事件侦听器: var localSvgDoc = emb.getSVGDocume

随着iOS8的最新更新,我们主要在iPad上运行的webapp已经崩溃

更具体地说,这个问题发生在SVG和应该触发而不是的事件上

我们使用SVG作为映射,g和polyfill标记作为标识符。这在iOS7和所有桌面浏览器中都能正常工作。事实上,它甚至可以在iOS8附带的Safari 8中工作。当应用程序被添加到主屏幕时,Safari版本将变为7+,根据platform.version

以下是我们要添加到svg文档中的事件侦听器:

var localSvgDoc = emb.getSVGDocument();
localSvgDoc.addEventListener( 'click', app.mapWorldCont.countryPicked, false);
localSvgDoc.addEventListener( 'touchstart', app.mapWorldCont.countryPicked, false);
// prevent elastic scroll on maps
localSvgDoc.addEventListener( 'touchmove', function(e) { e.preventDefault(); });
值得注意的是,我们通过嵌入来呈现SVG,但在对象或iframe中的问题是相同的

如果我在Safari控制台中检查元素,事件实际上会列在eventListeners列表中

似乎没有办法触发它们,即使是以Jquery为例,也是如此

解决方法:我们找到了一个解决方法,实际上是在svg的每个元素id上强制使用事件侦听器:

_.each(this.countryBlocks, function(blockName){
    _.each(blockName, function(countryID) {
        localSvgDoc.getElementById(countryID).addEventListener( 'click', app.mapWorldCont.countryPicked, false);
        localSvgDoc.getElementById(countryID).addEventListener( 'touchstart', app.mapWorldCont.countryPicked, false);
    });
});  

也许这有助于了解:iframes中来自iOS8主屏幕应用程序的非触摸事件实际上正在工作。一个也没有。只会触发单击和其他事件。这是一个bug。是的,似乎有相当多的bug…没有视频可以播放,或者没有找到解决方法。它有点负载,但无法启动…肮脏的Safari 7+、糟糕的AppleVideo和主屏幕上的音频标签都不起作用。即使在8.1.1版本下,苹果也忽略了在主屏幕使用时在iFrame上注册触摸事件的需要。真不敢相信。这似乎将永远被忽略:-