2010-11-30 64 views

回答

4

你的问题相当含糊。这里有一些提示用于开发iOS上的Web应用程序:

  • 对于固定宽度的网站,使用<meta>标签,告诉移动Safari浏览您的网站的宽度应该是什么,类似于:
    <meta name = "viewport" content = "width = 320, initial-scale = 2.3, user-scalable = no">
  • 你可以获得移动Safari支持的其他<meta>标签的列表here.
  • Mobile Safari向JavaScript DOM添加新事件以支持触摸和方向更改。 Here is the Apple reference to them.
  • 这是一个useful overview如何制作适用于iPad的网络应用程序。
  • 最后,尝试Google search
+1

如果你没有使用库来为你抽象出大部分内容,那么你可能会做错了。有几个很好的选择(包括让Ext JS的同一个人的Sencha Touch)。 – 2010-11-30 21:33:08

+0

问题是花式桌面应用程序需要Ext JS,而Sencha Touch最适合专用于移动设备的应用程序。我们需要的是一个在台式机和平板电脑上运行良好的框架,其中包括特殊的适配器,例如我的代码,以弥补这两种平台功能的细微差异。也许Ext JS 4将会是这个框架,但是在那之前,我和其他像OP一样,将不得不依靠黑客攻击Ext JS 3.3来满足我们的需求。 – divestoclimb 2010-12-01 16:17:51

1

我还没有机会测试它,但我编写了这个脚本来在1.5秒或更长时间的长按之后触发元素上的contextmenu事件。试试看。

更新:终于有机会测试它,它按预期工作。我将延迟从1500毫秒降低到1200毫秒,因为延迟对我来说太长了。

(function() { 
var EM = Ext.EventManager, 
    body = document.body, 
    activeTouches = {}, 
    onTouchStart = function(e, t) { 
    var be = e.browserEvent; 
    Ext.id(t); 
    if(be.touches.length === 1) { 
     activeTouches[t.id] = fireContextMenu.defer(1200, null, [e, t]); 
    } else { 
     cancelContextMenu(e, t); 
    } 
    }, 
    fireContextMenu = function(e, t) { 
    var touch = e.browserEvent.touches[0]; 
    var me = document.createEvent("MouseEvents"); 
    me.initMouseEvent("contextmenu", true, true, window, 
     1, // detail 
     touch.screenX, 
     touch.screenY, 
     touch.clientX, 
     touch.clientY, 
     false, false, false, false, // key modifiers 
     2, // button 
     null // relatedTarget 
    ); 
    t.dispatchEvent(me); 
    }, 
    cancelContextMenu = function(e, t) { 
    clearTimeout(activeTouches[t.id]); 
    }; 
if(navigator.userAgent.match(/iPad/i) != null) { 
    Ext.onReady(function() { 
     EM.on(body, "touchstart", onTouchStart); 
     EM.on(body, "touchmove", cancelContextMenu); 
     EM.on(body, "touchend", cancelContextMenu); 
    }); 
} 
})();