当前位置: 编程技术>移动开发
本页文章导读:
▪jquery_mobile => 监控手势抚摸 jquery_mobile => 监控手势触摸
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>TouchIt Demo</title>
<meta name="viewport" content="ini.........
▪ 百度map之云检索功能 百度地图之云检索功能下面介绍百度Demo提供的最后一个功能:云检索功能。该示例主要为海量位置数据的存储、检索、展示提供了一种。里面用的是测试的ak,如果开发者要使用自己的数据.........
▪ 浏览器安全有关问题分析 浏览器安全问题分析事端 – 安全漏洞穿透用户桌面
2009年2月,微软发布了广受关注的MS09-002安全漏洞公告,并随之马上提供了针对该漏洞的更新补丁。当访问者使用IE 7浏览器访问特定规格.........
[1]jquery_mobile => 监控手势抚摸
来源: 互联网 发布时间: 2014-02-18
jquery_mobile => 监控手势触摸
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>TouchIt Demo</title> <meta name="viewport" content="initial-scale=1.0,maximum-scale=1.0,height=device-height,width=device-width,user-scalable = no"> <script src="/blog_article/jquery-2.0.3.js" type="text/javascript"></script> <script src="http://glyde.eu/touchit-1.0.0.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function () { $( "#touch" ).touchit({ onTouchStart: function (x, y) { $("#touched").text('Touch Start ' + x + ':' + y); }, onTouchMove: function (x, y) { $("#touched").text("Touch Move " + x + ':' + y); }, onTouchEnd: function (x, y) { $("#touched").text("Touch End " + x + ':' + y); }, onDoubleTap: function (x, y) { $("#touched").text("Double Tap " + x + ':' + y); }, onPinch: function (scale) { $("#touched").text("Pinch " + scale); } }); }); </script> </head> <body > <span id="touched" >Touch and pinch the blue square...</span> <div id="touch" ></div> </body> </html>
[2] 百度map之云检索功能
来源: 互联网 发布时间: 2014-02-18
百度地图之云检索功能
下面介绍百度Demo提供的最后一个功能:云检索功能。该示例主要为海量位置数据的存储、检索、展示提供了一种。里面用的是测试的ak,如果开发者要使用自己的数据,则需要使用自己申请的ak。代码如下:
云检索功能介绍类(CloudSearchDemo):
package com.home; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class CloudSearchDemo extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_cloud_search_demo); } public void startCloudSearchDemo(View view) { Intent intent = new Intent(); intent.setClass(this, CloudSearchActivity.class); startActivity(intent); } }
CloudSearchDemo对应的布局XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="36dp" android:text="@string/cloud_search_tips" android:textColor="@android:color/black" android:textSize="16sp" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView1" android:layout_centerHorizontal="true" android:layout_marginTop="32dp" android:onClick="startCloudSearchDemo" android:text="开始体验" /> </RelativeLayout>
string/cloud_search_tips:
<string name="cloud_search_tips"> \t\tLBS.云是百度地图针对LBS开发者推出的平台级服务。结合已有的地图API和SDK服务。通过开放服务端存储和计算能力,提供海量位置数据存储、检索、展示一体化。\n\n \t\t该服务对开发者免费开放。测试demo里写入了测试的ak。开发者可以使用测试ak查看 LBS.云检索的效果。如果开发者要使用自己的数据,请在申请ak后替换demo中的ak。\n\n \t\t如有任何关于LBS.云服务的问题,诸如如何申请ak、如何存储和检索数据等,请访问百度地图官方“LBS开放平台”。地址:http://lbsyun.baidu.com/ \n </string>
云检索主Activity:
package com.home; import java.util.List; import android.app.Activity; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.View; import android.widget.Toast; import com.baidu.mapapi.BMapManager; import com.baidu.mapapi.cloud.Bounds; import com.baidu.mapapi.cloud.BoundsSearchInfo; import com.baidu.mapapi.cloud.CustomPoiInfo; import com.baidu.mapapi.cloud.DetailResult; import com.baidu.mapapi.cloud.DetailSearchInfo; import com.baidu.mapapi.cloud.GeoSearchListener; import com.baidu.mapapi.cloud.GeoSearchManager; import com.baidu.mapapi.cloud.GeoSearchResult; import com.baidu.mapapi.cloud.NearbySearchInfo; import com.baidu.mapapi.cloud.RegionSearchInfo; import com.baidu.mapapi.map.ItemizedOverlay; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.OverlayItem; import com.baidu.platform.comapi.basestruct.GeoPoint; public class CloudSearchActivity extends Activity implements GeoSearchListener { private MapView mMapView; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); DemoApplication app = (DemoApplication) this.getApplication(); if (app.mBMapManager == null) { app.mBMapManager = new BMapManager(this); app.mBMapManager.init(DemoApplication.strKey, new DemoApplication.MyGeneralListener()); } setContentView(R.layout.lbs_search); GeoSearchManager.getInstance().init(CloudSearchActivity.this); mMapView = (MapView) findViewById(R.id.bmapView); mMapView.getController().enableClick(true); mMapView.getController().setZoom(12); mMapView.setDoubleClickZooming(true); } @Override public void onGetGeoDetailsResult(DetailResult result, int type, int iError) { if (result != null) { if (result.content != null) { Toast.makeText(CloudSearchActivity.this, result.content.name, Toast.LENGTH_SHORT).show(); } else { Toast.makeText(CloudSearchActivity.this, "status:" + result.status, Toast.LENGTH_SHORT).show(); } } } @Override public void onGetGeoResult(GeoSearchResult result, int type, int iError) { if (result != null && result.poiList != null && result.poiList.size() > 0) { CloudOverlay poiOverlay = new CloudOverlay(this, mMapView); poiOverlay.setData(result.poiList); mMapView.getOverlays().clear(); mMapView.getOverlays().add(poiOverlay); mMapView.refresh(); mMapView.getController().animateTo( new GeoPoint((int) (result.poiList.get(0).latitude * 1e6), (int) (result.poiList.get(0).longitude * 1e6))); } } @Override protected void onPause() { mMapView.onPause(); super.onPause(); } @Override protected void onResume() { mMapView.onResume(); super.onResume(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); mMapView.onRestoreInstanceState(savedInstanceState); } @Override protected void onDestroy() { mMapView.destroy(); super.onDestroy(); } public void click(View v) { if (v.getId() == R.id.regionSearch) { RegionSearchInfo r = new RegionSearchInfo(); r.queryWords = "北京市五中"; r.ak = "3307f6443b2bdcae21af5d9564b5a88c"; r.cityName = "北京"; r.filter.put("databox", 848); r.scope = 2; GeoSearchManager.getInstance().searchRegion(r); } if (v.getId() == R.id.nearbySearch) { NearbySearchInfo r = new NearbySearchInfo(); r.queryWords = "北京"; r.ak = "3307f6443b2bdcae21af5d9564b5a88c"; r.location = new GeoPoint(39956948, 116412214); r.radius = 10000000; r.filter.put("databox", 848); r.scope = 2; GeoSearchManager.getInstance().searchNearby(r); } if (v.getId() == R.id.boundsSearch) { BoundsSearchInfo r = new BoundsSearchInfo(); r.queryWords = "五中"; r.ak = "3307f6443b2bdcae21af5d9564b5a88c"; r.bounds = new Bounds(39843895, 116402214, 40956948, 116431457); r.filter.put("databox", 848); r.scope = 2; GeoSearchManager.getInstance().searchBounds(r); } if (v.getId() == R.id.detailsSearch) { DetailSearchInfo r = new DetailSearchInfo(); r.id = 81217; r.ak = "3307f6443b2bdcae21af5d9564b5a88c"; r.scope = 2; GeoSearchManager.getInstance().searchDetail(r); } } } class CloudOverlay extends ItemizedOverlay { List<CustomPoiInfo> mLbsPoints; Activity mContext; public CloudOverlay(Activity context, MapView mMapView) { super(null, mMapView); mContext = context; } public void setData(List<CustomPoiInfo> lbsPoints) { if (lbsPoints != null) { mLbsPoints = lbsPoints; } for (CustomPoiInfo rec : mLbsPoints) { GeoPoint pt = new GeoPoint((int) (rec.latitude * 1e6), (int) (rec.longitude * 1e6)); OverlayItem item = new OverlayItem(pt, rec.name, rec.address); Drawable marker1 = this.mContext.getResources().getDrawable( R.drawable.icon_marka); item.setMarker(marker1); addItem(item); } } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } @Override protected boolean onTap(int arg0) { CustomPoiInfo item = mLbsPoints.get(arg0); Toast.makeText(mContext, item.name, Toast.LENGTH_SHORT).show(); return super.onTap(arg0); } }
其布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/regionSearch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="click" android:text="本地搜索" /> <Button android:id="@+id/nearbySearch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="click" android:text="周边搜索" /> <Button android:id="@+id/boundsSearch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="click" android:text="区域搜索" /> <Button android:id="@+id/detailsSearch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="click" android:text="详情搜索" /> </LinearLayout> <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" /> </LinearLayout>
配置文件和Application类与之前的一样。
附上图片效果:
[3] 浏览器安全有关问题分析
来源: 互联网 发布时间: 2014-02-18
浏览器安全问题分析
富客户端技术的不断发展,越来越多的应用使用浏览器作为访问媒介,包括很多企业级应用。据此分析,浏览器软件的安全功能还会不断增加,新增功能和插件可能会爆出的安全漏洞也会随之增加。由于浏览器的遍布性和应用规范的不统一,希望通过简单的方式获得高安全性是非常困难的。除了各个方面要密切配合之外,在系统层面实现更加强大的安全模型才能够让浏览器获得足够的安全动力。一个好消息是当前的互联网用户群体已经在使用习惯和警惕性上有了很大提升,不过还需要在系统平台上更好的固化和管理用户上网行为。即将发布的Windows
7等新系统平台,将带给我们新一轮答案。
事端 – 安全漏洞穿透用户桌面
2009年2月,微软发布了广受关注的MS09-002安全漏洞公告,并随之马上提供了针对该漏洞的更新补丁。当访问者使用IE 7浏览器访问特定规格的网页时,MS09-002漏洞会允许远程恶意代码执行,从而破坏访问者的计算机系统。这一问题的典型性在于,面向浏览器的恶意攻击已经成为过去一年当中增长最为迅猛的一类桌面安全威胁。同时,在该威胁发布后的,各大防病毒产品厂商都截获了大量基于该漏洞的攻击。甚至一些以前流行过的恶意软件,都开始集成针对MS09-002的攻击机制生成新变种,试图卷土重来。
其它近期值得关注的安全漏洞
在MS09-002漏洞发布之前,还有一些值得关注的针对浏览器的安全漏洞。比如去年年底出现的微软0day漏洞,其影响的浏览器版本比MS09-002还要广泛。而目前最新爆出的Adobe安全漏洞,则利用了PDF文档中嵌入的可执行浏览器脚本,将会引起非常广泛的安全影响。
缘起 – 安全爆炸点的轮回
在整个2008年当中,桌面安全的最主要问题集中于木马下载器等等以Web访问为载体的病毒程序。据不完全统计,在过去的三年间,基于Web的病毒程序每年都保持着至少翻一番的增长水平。而2008年作为病毒大爆发的一年,所出现的超过一千万种新病毒中,有超过百分之二十都是下载器程序。其实下载器程序并不是一个新鲜产物,在很早之前就有使用这类机制的恶意程序存在。但是之所以在近年来变得如此“繁荣”,核心的原因还在于桌面安全攻防两大阵营的角力,所带来的整个安全环境的变化。作为最古老也是最基本的互联网应用,网页访问无疑拥有最庞大的用户群体和最高的使用频率。但是随着浏览器软件的功能不断丰富、家族成员不断增长,反而成为在安全防护上相对薄弱的一环。与电子邮件、即时通讯等主流互联网应用相比,网页访问保护工具虽然数量不少,但在深度和精度上却难以匹敌其它专项工具。由于网页访问表面的简单性,反而掩盖了用户误用行为所带来的危害,以及纷繁的技术功能所带来的安全隐患。
画像 – 浏览器上的安全风险
为了提供更丰富的功能,在Web页面中使用了越来越多的客户端脚本和组件技术。这一方面带来了更好的功能和用户体验,同时也使用户在使用浏览器软件时要面对更多的安全问题。木秀玉林,风必摧之,JavaScript客户端脚本技术已经成为事实标准上的标准,自然也是被恶意软件利用的主要对象。由于JavaScript对操作系统的使用范围和权限受到了较为严格的限制,所以很难利用其直接进行破坏。但是下载器程序往往利用JavaScript到互联网上下载实际的攻击代码。ActiveX作为浏览器软件与其它平台进行交互的重要技术,也有着悠久的安全问题历史。由于具有比浏览器脚本更强的系统操纵能力,基于ActiveX组件的病毒程序往往更具破坏力,而且可以直接对操作系统展开攻击。很多企业级的软件系统将ActiveX组件作为实现客户端功能的核心技术,使安全保护体系的搭建变得更加复杂。除此之外,利用Windows
Script Host的VBScript以及目前已经较少使用的Java Applet小程序等等,都可以基于浏览器开展破坏活动。同样值得关注的是,作为桌面计算机上最常用的应用程序,浏览器现在与操作系统的结合越来越紧密。除了与Windows操作系统紧密集成的IE浏览器之外,其它的浏览器同样也利用很多操作系统的底层组件来提升自身的功能价值。这也是为什么利用浏览器问题的安全攻击可以如此具有破坏力的重要原因,很多漏洞允许攻击代码可以直接破坏或利用操作系统核心。特别对于那些厂商尚未发布更新补丁的0day攻击来说,桌面计算机将完全暴露在攻击之下几无还手之力,这也是目前云安全技术被寄予厚望的原因。趋势科技在截获微软浏览器的0day攻击漏洞时只花了几分钟时间,这给漏洞补丁的及时发布提供了良好的前提。而几乎已经成为标准功能的基于云设施的Web地址过滤,则可以有效地防止用户访问那些带有安全威胁的网站,这样即使计算机在存在漏洞的情况下也有更大的几率在面对攻击时生存。
走向 – 互联网入口的安全变革
一直依赖,对于浏览器这个最重要的互联网访问入口,用户主要依赖于安全厂商提供的软件产品来获得安全保护。不过可以看到,浏览器厂商们也在不断补充自身产品的安全特性,这可以给用户带来层次更丰富的保护。对于各种利用客户端脚本的安全攻击,特别是利用ActiveX这样可能直接实现安全攻击的恶意程序,浏览器产品以及操作系统本身的安全机制往往显得更加重要。微软在新推出的IE8浏览器当中,会对传统的ActiveX控件机制作出调整。在新的浏览器版本中,ActiveX控件的安装将不再需要管理员权限,而使用当前登录用户的权限安装。这样可以实现更符合逻辑的权限分割,一旦当恶意程序利用了ActiveX感染了计算机,也不会轻易的获得管理权限。而且如果一个ActiveX插件不在该机制的白名单中,其操作本地系统的功能将受到很大的限制,这可以很好的缓解利用ActiveX机制破坏操作系统的问题。这一改变的衍生意义在于,用户和厂商都可以更好地对Flex、Silverlight等流行的富客户端访问插件进行控制,从而在一定程度上避免浏览器上不断增加的可执行能力所带来的安全风险。不过,这项改进也存在一些限制,比如目前只有在Vista或更高版本的操作系统中才能使用该机制,而目前占有率还比较高的XP操作系统则无法使用。
以网络钓鱼为代表的各种网络欺诈,也是目前主要的安全威胁之一。浏览器软件正在广泛地集成各种识别欺骗性网址的功能,其中较为典型的当属FireFox。由于提供插件开发机制,用户除了可以使用FireFox自身提供的防网络钓鱼功能,还可以下载很多提供类似功能的插件,从而获得较为适合自己的防欺诈保护。在微软的IE8浏览器当中,还提供了一项独特的功能改进。用户在浏览器的地址栏输入网址之后,IE8会识别网址中的顶级域名部分并将其用高亮的形式显示。虽然这项改进看起来非常的小,但是在实际使用过程中的效果缺出乎意料的有效。这能够明显地提高用户的注意力,从而判别自己是否正确输入了网址。同时,在IE8中提供的增强的安全过滤器,也可以完成对网址的分析。最重要的是,通过设置安全策略,可以将这个安全过滤器的防护等级提高,从而更大限度的屏蔽可疑网址。
上网行为安全袖珍指南
事实上除了注意更新操作系统漏洞和使用有效的安全防护产品等技术手段之外,想提高访问互联网时的安全性,要重点控制上网时的用户行为。注意应用情景是首要的原则,虽然在自己的个人计算机上记忆密码相对比较安全,但是养成不使用记忆密码功能的习惯还是更加稳妥。如果是在公共场合上网,即使没有使用密码记忆,也建议对访问历史进行清除。不要注册帐号时使用相同的信息是另一个好习惯,这样可以避免一点被突破破层层被突破。同时,对于不需要提供真实信息的网络服务,在注册的时候还是应该适当的保留个人信息。
展望 – 浏览器的明日危机
最新技术文章: