Js - 动态创建Iframe{兼容IE/Firefox/...}

这个主要是在做Ajax无刷新上传的时候用了。

其实也可以直接写Iframe在Html上,但考虑到会不简洁,怕误删等其他操作造成错误,就用这个动态创建的。

狗狗了一下找到下面一段代码:

var objBody = document.getElementsByTagName("body").item(0);
var iframe = document.createElement('iframe');
iframe.id = 'fileUploaderEmptyHole';
iframe.name = 'fileUploaderEmptyHole';
iframe.width = 0;
iframe.height = 0;
iframe.marginHeight = 0;
iframe.marginWidth = 0;
objBody.insertBefore(iframe, objBody.firstChild);

这段代码在Firefox运行正常,但在Ie下不行。会在新弹出的窗口中打开。

调试了一下,发现在IE里是iframe.name = 'fileUploaderEmptyHole';
这行代码无效。

再次更改代码,使用

iframe = document.createElement('<iframe name="fileUploaderEmptyHole">');

这样的形式。但是这样子在非IE的浏览器里会抛出异常。

所以。。 那么。。  捕获异常判断浏览器

最后再处理的兼容Firefox/IE等浏览器的动态创建一个Iframe的Js代码
如下:

var iframe;
try {
  iframe = document.createElement('<iframe name="fileUploaderEmptyHole">');
} catch (ex) {
  iframe = document.createElement('iframe');
}
iframe.id = 'fileUploaderEmptyHole';
iframe.name = 'fileUploaderEmptyHole';
iframe.width = 0;
iframe.height = 0;
iframe.marginHeight = 0;
iframe.marginWidth = 0;

IE,Firefox,Chrome,Opera等浏览器Input输入框输入事件详细分析

1.基础:本次分析原理就是在各个浏览器下(IE
,Firefox
,Chrome
,Opera
) input内容变化的时候触发事件的各种不兼容性.在ie下用onpropertychange事件,在 其他浏览器里用input事件.

2.用例:对每个浏览器分别测试如下的情况:

–输入英文字母时–开启输入法时–大小写不同时–输入运算符时–按下tab键时–输入法中按下空格时–按下控制键时–复制粘贴时–删除文本时–等等

3.测试开始:(只标出特殊情况,没标出的表示正常触发,每次只触发一次事件)

chrome
:+ 开启输入法时,可以捕捉到输入事 件.+开启输入法的时候按下空格键,触发两次事件,猜测一次是空格触发的,一次是输入法改变输入框里的文本时触发的.+开启输入法的时候,按下空格后,立 即按下大写锁定,此后所有的输入事件都会被触发两次,原因不知.+没有开启输入法的时候,方向键不会触发事件,但是开启输入法后,方向键可以触发事件.+ 剪切和粘贴都会触发事件.+tab键不处罚事件,开启输入法时,按tab键触发事件.+按住shift和其他键(例如:数字键),每输入一个字符触发两次 事件.

Firefox
:+ 开启输入法时,不能扑捉到事件,但 是按下空格时,可以触发两次事件.+任何时候方向键都不触发事件.+开启输入法的时候,按下空格后,立即按下大写锁定,此后所有的输入事件都会被触发两 次,原因不知.+按下tab键的时候不触发事件.++Firefox页面刷新的时候内容会被保留在输入框里.+按住shift和其他键(例如:数字键), 每输入一个字符触发两次事件.

opera
: + 正常情况下,在输入框里按下tab键会 触发一次事件,但是此后只要不刷新页面,tab键都不会再触发此事件.+开启输入法后不会触发事件,开启后,方向键和tab键都不触发事件.+开启输入法 时,按下空格只触发一次事件,不会出现触发两次事件的情况.+粘贴的时候触发事件,剪切的时候不触发

ie
: +输入法不会触发事件,按空格也都是只触发一 次,方向键任何时刻都不触发.+刷新页面的时候内容会留在input里,而且注意,不管input是不是空的,刷新页面后自动触发一次事件.

3.总结.

就一句话,差异很大.

注意input事件可以用在chrome,Firefox,opera里,但是只能用 addEventListener绑定,不能用ontype形式,而onpropertychange可以用on形式,也可以用attachEvent绑 定

magento使用paypal支付接口测试

paypal帐户,帐户类型分为Personal(个人)、Premier(高级)和Business(商业),他们的差别对于开发者

来说主要是返回的信息,Personal的不能使用IPN和PDT等商家工具,即不能获取交易信息,但是Personal帐户收款无需手续费;Premier和Business当然就提供了IPN和PDT功能,能够在客户支付成功后,将交易信息传给指定的网站,用来二次使用。

这里插进来介绍一下paypal sandbox,也就是沙盒,是paypal提供给开发者的一个工具,非常好用。

作为Magento开发者,第一次使用Paypal总是希望能使用测试账号来测试功能是否工作正常,基本流程如下: 

1. 去developer.paypal.com申请开发账号(这里以dev123@gmail.com为例),申请后自动建立一个buyer和一个seller测试子账号供测试(这里分别以buyer123@gmail.com和seller123@gmail.com为例)。 

2. Magento后台允许PayPal Standard支付: 
System->Configuration->Payment Methods->PayPal Website Payments Standard 

3. Magento后台设置PayPal账号 
System->Configuration->PayPal->Website Payments Standard 
    Business Account: seller123@gmail.com 
    Sandbox Mode : Yes 

最常犯的错是:将Business Account设置为dev123@gmail.com, 这样当支付进入最后一步会提示这样的错误(导致订单别取消): 
This invoice has already been paid. For more information, please contact the merchant.
 

4. 打开浏览器登录developer.paypal.com,在同一个浏览器下订单,当place order转入paypal网站时(sandbox网站),你可以选择输入信用卡信息支付,也可以选择登陆PayPal,如果选择登录可以用前面的buyer123@gmail.com,首次登陆可能要求你帮定一个银行账号,因为是测试账户,这里的银行账号是无所谓的,接下来就会一路顺利,确认支付成功,点击回到商家网站按钮,订单完成。 

注:第4条提到的“打开浏览器登录developer.paypal.com,在同一个浏览器下订单”是必需的,否则不能完成测试! 
另外一个可能导致订单不成功的的原因是:Shipping Address必须足够真实,否则PayPal会Decline你的 

还有在这里提一下paypal ipn(Instant Payment Notification),就是Paypal开发的一种能主动通知第三方卖家系统交易状态的一种机制。IPN的原理很简单,就是当产生了一个交易之后, 交易状态发生变化时,如用户已经付款、或者退款、撤销时,Paypal利用常用的HTTP POST方式,将交易的一些变量提交给网站的某个页面(称之为IPN Handler),当这个页面接受到请求时候,将这些数据原封不动加上一个指示验证的cmd=_notify-validate,POST回Paypal 的接口地址,如果数据正确,那么Paypal返回字符串VERIFIED,否则为INVALID,如果结果为VERIFIED,那么你的程序就可以使用这 些数据进行操作。

电子商务系统使用paypal支付接口的程序流程 及通信接口

PayPal支付接口的PHP开发方式

很实用的一篇HTTP状态码

100系列码

从100到199范围的HTTP状态码是信息报告码。基于各种原因考虑,大多数情况下我们 是很少看见这些代码的。首先,如果一个浏览器尝试访问一个网站,而网站返回这些代码时,它们往往都不会显示在屏幕上。它们只是浏览器使引用的内部码。另 外,这些代码不常见的另外一个原因是起初HTTP标准不允许使用这一范围的状态码。就其本身而言,它们也一直没有被广泛地使用。

200系列码

从200到299范围的状态码是操作成功代码。同样的,在正常的Web上网中,你也很可能 不曾在屏幕上看到这些代码。相反的,这些代码是在浏览器内部使用的,用以确认操作成功确认和当前请求状态。虽然这些代码通常不显示,但是有一些故障排除工 具能够读到它们,就像和其它大多数的HTTP状态码一样,它们在错误诊断过程中是非常有用的。

300系列码

从300到399范围的状态码是重定向代码。本质上,它们告诉Web浏览器必须执行其它一 些操作以完成请求。基于这个命令的特点,它可以自动地执行,或者要求额外的用户输入。比如,状态码301表示一个特定资源已经被永久地先移除,因此将来所 有访问该资源请求都应该定向到一个特定的URL上。

400系列码

在400范围的状态码是客户端错误码。这种类型的错误码往往跟安全相关。比如,如果一个客 户端尝试访问一个未授权访问的资源,服务器就会返回一个状态码401。类似地,如果客户端尝试访问一个禁止的资源,在这种情况下客户端的认证状态是一样 的,那么服务器可能会返回一个状态码403,表示禁止对该资源进行访问。

如果请求不正确或客户端超时,400级错误码也可能被返回。然而,有一个400级的代码总 是具有误导性:404。虽然这个代码在技术上被归类为客户端错误,但是事实上它可以同时表示客户端或服务器上的错误。但这个错误码只是简单地显示为没有找 到请求的资源。当这个错误发生在客户端时,它往往表示的是网络连接问题。在其他时候,这个错误的发生还可能是由于资源已从服务器上转移或重命名而造成的。

500系列码

500级状态码表示的是服务器错误。比如,如果Web服务器超时,它就会产生一个504错 误。虽然,一个500级的错误往往表示的不是服务器的问题,而是在服务器上运行的Web应用的问题。比如,我自己的个人网站是用ASP编写的,它负责动态 生成HTML网页。在调试的过程中,有Bug的代码总会导致我的Web服务器返回HTTP状态码500,该代码是一般表示内部服务器错误。这个代码只是出 现问题了,并且HTTP无法解决该问题。

—————————————–

1xx – 信息提示

“100″:Continue

“101″:witchingProtocols

2xx – 成功

“200″:OK

“201″:Created

“202″:Accepted

“203″:Non-AuthoritativeInformation

“204″:NoContent

“205″:ResetContent

“206″:PartialContent

3xx – 重定向

“300″:MultipleChoices

“301″:MovedPermanently

“302″:Found

“303″:SeeOther

“304″:NotModified

“305″:UseProxy

“307″:TemporaryRedirect

4xx – 客户端错误

“400″:BadRequest

“401″:Unauthorized

“402″:PaymentRequired

“403″:Forbidden

“404″:NotFound

“405″:MethodNotAllowed

“406″:NotAcceptable

“407″:ProxyAuthenticationRequired

“408″:RequestTime-out

“409″:Conflict

“410″:Gone

“411″:LengthRequired

“412″:PreconditionFailed

“413″:RequestEntityTooLarge

“414″:Request-URITooLarge

“415″:UnsupportedMediaType

“416″:Requestedrangenotsatisfiable

“417″:ExpectationFailed

5xx – 服务器错误

“500″:InternalServerError

“501″:NotImplemented

“502″:BadGateway

“503″:ServiceUnavailable

“504″:GatewayTime-out

“505″:HTTPVersionnotsupported

状态代码状态信息含义
100Continue初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新)
101Switching Protocols服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新)
200OK一切正常,对GET和POST请求的应答文档跟在后面。
201Created服务器已经创建了文档,Location头给出了它的URL。
202Accepted已经接受请求,但处理尚未完成。
203Non-Authoritative Information文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝(HTTP 1.1新)。
204No Content没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。
205Reset Content没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(HTTP 1.1新)。
206Partial Content客户发送了一个带有Range头的GET请求,服务器完成了它(HTTP 1.1新)。
300Multiple Choices客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。
301Moved Permanently客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。
302Found类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”。出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。

注意这个状态代码有时候可以和301替换使用。例如,如果浏览器错误地请求http://host/~user(缺少了后面的斜杠),有的服务器 返回301,有的则返回302。

严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。

303See Other类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取(HTTP 1.1新)。
304Not Modified客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告 诉客户,原来缓冲的文档还可以继续使用。
305Use Proxy客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。
307Temporary Redirect和302 (Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是POST,即使它实际上只能在POST请求的应答是303时才能重定 向。由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只 能跟随对GET请求的重定向。(HTTP 1.1新)
400Bad Request请求出现语法错误。
401Unauthorized客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填 写合适的Authorization头后再次发出请求。
403Forbidden资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。
404Not Found无法找到指定位置的资源。这也是一个常用的应答。
405Method Not Allowed请求方法(GET、POST、HEAD、DELETE、PUT、TRACE等)对指定的资源不适用。(HTTP 1.1新)
406Not Acceptable指定的资源已经找到,但它的MIME类型和客户在Accpet头中所指定的不兼容(HTTP 1.1新)。
407Proxy Authentication Required类似于401,表示客户必须先经过代理服务器的授权。(HTTP 1.1新)
408Request Timeout在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。(HTTP 1.1新)
409Conflict通常和PUT请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。(HTTP 1.1新)
410Gone所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和404的不同在于,返回407表示文档永久地离开了指定的位置,而 404表示由于未知的原因文档不可用。(HTTP 1.1新)
411Length Required服务器不能处理请求,除非客户发送一个Content-Length头。(HTTP 1.1新)
412Precondition Failed请求头中指定的一些前提条件失败(HTTP 1.1新)。
413Request Entity Too Large目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个Retry-After头(HTTP 1.1新)。
414Request URI Too LongURI太长(HTTP 1.1新)。
416Requested Range Not Satisfiable服务器不能满足客户在请求中指定的Range头。(HTTP 1.1新)
500Internal Server Error服务器遇到了意料不到的情况,不能完成客户的请求。
501Not Implemented服务器不支持实现请求所需要的功能。例如,客户发出了一个服务器不支持的PUT请求。
502Bad Gateway服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。
503Service Unavailable服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个 Retry-After头。
504Gateway Timeout由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。(HTTP 1.1新)
505HTTP Version Not Supported服务器不支持请求中所指明的HTTP版本。(HTTP 1.1新)

gspay支付页面错误代码表示的意思

magento
和osc使用gspay支付接口跳到gp支付页面出现的错误代码标识意思如下:

101 客户的IP和选择的国家不匹配
(还有,自己网站不要经常上去做购买测试,我们有IP监测,防止卖家替客人刷卡,或者是洗钱。这个监测在您的账户live后通常都会拒绝您自己的测试支付,显示为101 108 109 119或121)
102 客户国家的IP被封锁
103 美国客户的IP和州不匹配
104 欺骗的卡持有人
105 欺骗的卡号
106 客户浏览器的语言被封锁
107 客户国家被封锁
108 欺骗的邮件地址
109 欺骗的IP
110 欺骗的电话号码
111 客户浏览器被封锁
112 超过每小时的最大交易限额
113 小时IP限制
114 多次尝试用不同的客户信息
116 网站必须注册
118 不能自己测试
119 高拒付风险客户,银行不接受的付款
121 填写的信息和发卡行不符
122 表示数次购买时,其余资料不同,但填写的邮箱是相同的
123 多个不同的全名用一个IP或者一个浏览器多次下单

网站设计师必备的浏览器测试工具

虽然偶是程序员。。

 

包括:Firefox,Opera,IE和Safari,甚至一些更偏门的浏览器,如: Dillo, Epiphany, Flock,Galeon, Konqueror, Seamonkey等。你可以选择分辨率为640-1600,颜色深度8-32位,开启JavaScript,Java和Flash支持等。

跨浏览器兼容性是网页设计要解决的最复杂的问题之一。web标准虽然能够保证一定的统一性,但是没有浏览器是完美的,你仍然需要花点力气保证你的网页浏览者能够浏览你的网站。

你无法预知访问你的网站的人使用的是什么浏览器和操作系统。不同的浏览器和操作系统使用的字体可能不一样。某些平台可能无法识别一些字体大小,又可能没有安装这些字体。

根据2007.1.10 W3Counter 的统计,全球范围内的浏览器使用情况是,IE家族浏览器占主导,共占约66%。位居第二的是Firefox,25%左右。Internet Explorer 6约一半的占有率,对于一些网页开发者和黑客来说是十分方便的。

事实上,浏览器的统一性是很难处理的,要处理好它,你要知道问题所在,知道不同浏览器的特点,所以在你的页面完成前,你需要在不同的浏览器上测试你 的页面。为此你想到的可能的办法是安装各种各样的浏览器来测试,以下向你介绍几种基于Web的浏览器测试服务,使你不用安装多种浏览器也可以在不同平台上 测试你的网页。

IE Web Renderer

IE Web NetRenderer 能够帮你测试你的页面在IE5.5,6,7中的显示效果。

Browsershots

这个工具可以帮你测试你的网页在各种浏览器中的显示,包括:Firefox,Opera,IE和Safari,甚至一些更偏门的浏览器,如: Dillo, Epiphany, Flock,Galeon, Konqueror, Seamonkey等。你可以选择分辨率为640-1600,颜色深度8-32位,开启JavaScript,Java和Flash支持等。

Litmus

Litmus 提供约30种浏览器测试,其中有17种基于Windows平台,有6种基于Mac OS X,剩下还有其它的搭配,此外Litmus还提供了一个版本管理工具。但使用Litmus的费用比较贵,一个月要39美元。

Browser Photo

Browser Photo提供了Windows,Mac,Linux平台的IE,Opera,Firefox,Safari的测试服务,总共24种搭配。其费用也是比较贵的,一次性使用需要支付15美元,或者一个域名一年150美元无限使用。

Browsrcamp

Browsrcamp提供Safari 2.0.4全屏和五种分辨率测试服务,是免费的。另外它也提供Mas OS X上的Camino, Firefox, Flock, iCab, Mozilla, Netscape, OmniWeb, Opera, Safari, SeaMonkey 和Shiira等多种浏览器的测试,但前提是你需要有一个VNC客户端,一条相对快的网线,和支付3美元/2天或者99美元/年的费用。

Browsercam

使用Browsercam需要一个昂贵的VNC客户端。其提供超过70种浏览器,基于Linux, Win, Mac和移动设备操作系统BlackBerry, Win Mobile等多种平台的测试服务。Browsercam的收费有多种模式,支付费用由20到1000美元/月。不过,在Browsercam注册后24 小时内是可以免费使用的。

BrowserPool

BrowerPool也提供了VNC接入。在BrowserPool里,提供了多种操作系统和浏览器的组合,费用为40美元每月或者477美元每年,它也提供了一些免费的试用帐号。