我即将开发一个主要的支持触控的移动 WebKit 应用程序。
我正在寻找与基于桌面的标准浏览器不同的任何提示或建议。
例如:
在 iOS 上,click 事件不会向上传播到元素之上的 body 元素,但某些情况除外(链接、输入、带有附加事件的元素等) .)。
Android WebKit 不会为多点触控发出事件。
我知道这些。 还有其他问题吗?你知道一些已知问题的列表吗?
最佳答案
我最近在 iPad 上的尝试中发现了一些东西。
1: iOS 4.2 版存在运行过多 document.getElementById('foo'); 的错误。将导致浏览器滞后,从而无法正确执行命令。为了解决这个问题,您需要创建变量来保存此信息,并且仅在需要时才发出选择命令。不过,iOS 的 4.3 版确实解决了这个问题,因为我已经在我的 iPad 上进行了测试。
2: 在使用定位时,我发现在创建自己的视频 Controller (用于 html5)时,如果您尝试使用 position:relative 或 position:absolute 调整视频容器的大小,您将不再看到视频,而是一个漂亮的黑屏(有声音!)。为了解决这个问题,只需定位父框架就可以了。
3:如果您使用的是 iScroll一定要让它加载超时;特别是如果您在页面上有一些其他 javascripts,即使文档在“页面已加载”时通过以下方式加载它:
// Load iScroll when DOM content is ready.
document.addEventListener('DOMContentLoaded', loaded, false);
我已经失败了,我一生都无法弄清楚为什么我的 div 没有正确调整大小,只显示了最后两个元素之外的所有元素并且没有滚动。相反,我只是做了一个
$(function(){
//other page loaded items to do
//the iScroller init
setTimeout('iScrollerInit();',200);
});
它很快解决了这个问题。
4:如果您发现您的点击不太正常,我发现很多移动 SDK 的所有内容都有绑定(bind)项,因此很难实现对内容的点击通常你想要。因此,要解决此问题,您可以执行以下操作:
$("#yourId").unbind("click").click(function(){
//what to do when clicked
});
我发现它的效果最好。
**更新 - 2012 年 11 月 **:已经有几年了,还有很多要添加的内容,所以想稍微更新一下列表。
5: Javascript 在少数设备上仍然很昂贵(2012 年 12 月)。操作 DOM 的操作会在设备上产生大量延迟,在执行这些操作时您应该非常小心。您需要确保在 Android 旧设备和 iPhone 旧设备上测试您的移动网页,因为根据我们的指标,这些设备仍然是使用良好的设备。
6:如果您传递 HTML 以加载到设备(iPhone 应用程序或 Android 应用程序)上的 WebView 中,有时您会看到高度几乎为 0。您需要做什么要做的是让您的 iPhone 或 Android 应用程序在针对 div 的实际页面上进行 Javascript 调用,以检查页面 offsetHeight,然后可以准确设置 webview 高度。
**更新 - 2012 年 12 月 **:更棒的发现
7:我发现,当您将 div 定位为点击事件时,移动浏览器会在触发事件之前等待 300 毫秒,从而有效地造成延迟。他们这样做是为了确认点击不是双击。为了避免这种情况,您可以绑定(bind) touchend 事件,它会立即触发!
这里有一段代码
$(document).ready(function() {
$('#element').bind('touchstart', function(event) {
event.stopPropagation();
event.preventDefault();
$(this).toggleClass('hover_heading');
});
$('#element').bind('touchend', function(event) {
event.preventDefault();
$(this).toggleClass('hover_heading');
});
});
然后,一旦您看到您的项目发生闪烁,请使用此将其移除。
body * {
-webkit-tap-highlight-color: rgba(0,0,0,0);
}
此外,如果您想查看 google 撰写的一篇出色的文章,您可以在此处查看: - Creating Fast Buttons for Mobile Web Applications
**更新 - 2013 年 2 月 **:更棒的发现
8:在对 CSS 文件进行版本控制并使用以下 URL 缓存它们时:mydomain.com/css/styles.css?v=123(或其他),在 android 2.2 设备上要小心更早,因为这会导致极其奇怪的行为。
根据我的发现,android 将呈现完全错误的情况,并强制 html 甚至被弄乱。遗憾的是,使用这些旧设备的最佳方法是更改实际文件名。
希望这些发现可以帮助其他人,因为我已经在这些问题中苦苦挣扎了几个小时,摸不着头脑:)
关于android - iOS 或 Android 上的 WebKit 开发中的陷阱/错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4669823/
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain