显示下一条  |  关闭

Objector.L's Blog

<Explore Essensials of JavaScript />

 
 
 
 
 
 

eval和JSON

2009-12-29 22:26:59 阅读201 评论0 292009/12 Dec29

本文着重解释eval函数和JSON数据格式之间的联系以及一些细节上的问题。如果您想详细了解eval和JSON请参考以下链接:

eval  :https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Functions/Eval

JSON:http://www.json.org/

eval函数的工作原理

eval函数会评估一个给定的含有JavaScript代码的字符串,并且试图去执行包含在字符串里的表达式或者一系列的合法的JavaScript语句。eval函数将把最后一个表达式或者语句所包含的值或引用作为返回值。

举例说明

eval评估JavaScript表达式 var bar = 'bar'; var foobar = eval('"foo" + bar'); alert(foobar); eval评估JavaScript语句 var bar = 'bar'; // if

作者  | 2009-12-29 22:26:59 | 阅读(201) |评论(0) | 阅读全文>>

获取文档的尺寸:利用Math.max的另一种方式

2009-12-25 22:40:12 阅读93 评论0 252009/12 Dec25

由于各种因素的存在,使得获取HTML文档的尺寸(高度和宽度)变得有点复杂。这些因素可能包含:

不同的浏览器获取文档尺寸的方式不尽相同; 每个浏览器对于页面的呈现都有严格模式 (strict mode)和怪异模式 (quirk mode)两种,每一种呈现方式获取文档尺寸的方式不同;

对于第一种情况,根据浏览器的不同,可能涉及到的属性包括scrollHeight, offsetHeight, clientHeight中的一种甚至多种的组合。实现起来多少需要有一些技巧 (hack).

对于第二种情况,涉及到的属性包括document.body  (怪异模式), document.documentElement (严格模式)。

实现 (Implementation)

网上有不少实现正确计算出文档的高度和宽度的方法,不过我认为下面的方式是我所见过的最hack和简洁的。

代码 (Code)

function getDocHeight() { var D = document; return Math.max( Math.max(D.body.scrollHeight, D.documentElement.scrollHeight), Math.max(D.body.offsetHeight, D.documentElement.offsetHeight), Math.max(D.body.clientHeight,

作者  | 2009-12-25 22:40:12 | 阅读(93) |评论(0) | 阅读全文>>

解决IE不能在新窗口中向父窗口的下拉框添加项的问题

2009-10-19 13:33:42 阅读200 评论0 192009/10 Oct19

首先我们要明确下面的事实:

利用options.add(new Option("text", "value"));来向下拉列表(SELECT BOX)添加新项(Option)在同一个页面利用上述方法添加新项没有任何问题

现在我们要尝试实现下面的功能:

前提

有两个页面A和B,A页面含有一个下拉列表控件

目标

当在A页面通过window.open打开B页面时,要求B页面具有向A页面的下拉列表控件中插入新项(option)的能力。

下面的方式在非IE浏览器上正常运行,IE浏览器中将导致失败:

JavaScript in B page

function updateData() { // get document object of its parent window(opener) var doc = opener.document, list = doc.getElementById("ddList"); // insert dd list a new option list.options.add(new Option("New Text", list.options.length)); window.close(); }

因为IE不允许在另一个页面去改变当前页面的下拉列表控件的值。但是我们之前说过,IE是允许在自己页面改变自己的下拉列表的值。所以我们的解决思路就是在父窗口增

作者  | 2009-10-19 13:33:42 | 阅读(200) |评论(0) | 阅读全文>>

揭开constructor属性的神秘面纱

2009-9-2 18:39:19 阅读172 评论0 22009/09 Sept2

在Javascript语言中,constructor属性是专门为function而设计的,它存在于每一个function的prototype属性中。这个constructor保存了指向function的一个引用。在定义一个函数(代码如下所示)时,

function F() { // some code }JavaScript内部会执行如下几个动作:

为该函数添加一个原形(即prototype)属性 为prototype对象额外添加一个constructor属性,并且该属性保存指向函数F的一个引用这样当我们把函数F作为自定义构造函数来创建对象的时候,对象实例内部会自动保存一个指向其构造函数(这里就是我们的自定义构造函数F)的prototype对象的一个属性__proto__,所以我们在每一个对象实例中就可以访问构造函数的prototype所有拥有的全部属性和方法,就好像它们是实例自己的一样。当然该实例也有一个constructor属性了(从prototype那里获得的),这时候constructor的作用就很明显了,因为在这时,每一个对象实例都可以通过constrcutor对象访问它的构造函数,请看下面代码:

var f = new F(); alert(f.constructor === F);// output true alert(f.constructor === F.prototype.constructor);// output true 我们可以利用这个特性来完成下面的事情:

对象类型判断,如

作者  | 2009-9-2 18:39:19 | 阅读(172) |评论(0) | 阅读全文>>

EBS在Firefox 3.5.2中崩溃

2009-8-17 20:04:15 阅读231 评论0 172009/08 Aug17

在Firefox最新的版本 3.5.2中打开EBS 的 Applet界面时会导致浏览器崩溃,普通Web界面没有问题。如果你偏好使用Firefox浏览器的话,建议使用3.5.1或更低版本运行EBS应用。

作者  | 2009-8-17 20:04:15 | 阅读(231) |评论(0) | 阅读全文>>

如何获取和修改HTML网页标题

2009-8-14 20:44:12 阅读507 评论0 142009/08 Aug14

作为一个标准的HTML文档,网页标题(title)是必不可少的属性。随着浏览器的发展,我们又多了一种访问和修改文档的方式:DOM。所以我们获取网页标题的方式大致可分为以下两种:

通过document对象访问title

var title = document.title;通过DOM方式访问title

var title = document.getElementsByTagName('title')[0];但是这两种获取方式是截然不同的,document.title这种方式可以直接获得网页标题的字符串副本,它返回一个字符串;然而通过DOM方式获取的则是HTML文档中的title结点对象。

var TOSTRING = Object.prototype.toString;

alert(TOSTRING.call(document.getElementsByTagName('title')[0]));// output [object Object]

alert(TOSTRING.call(document.title)); // output [object String]我们可以利用结点对象的innerHTML属性输出网页标题:

document.getElementsByTagName('title')[0].innerHTML;

修改网页标题

此处我们讨论IE浏览器在实现时的一个小Bug:我们知道,理论上可以通过DOM修改HTML文档中的任何一个节点

作者  | 2009-8-14 20:44:12 | 阅读(507) |评论(0) | 阅读全文>>

IE Bug:DocumentFragment和SCRIPT

2009-8-5 23:29:25 阅读196 评论0 52009/08 Aug5

最近在学习如何利用动态加载javascript文件的技术来提高页面的加载速度。实践中了解到,在浏览器解析并呈现(Render)HTML文档的过程中,一旦遇到带有src属性script标记,浏览器会立即阻断页面的呈现,并立即去寻找和加载javascript外部文件。如果文件尺寸很大,则会使页面出现空白状态,在降低页面呈现速度的同时也带给用户很糟糕的体验。

Nicholas C. Zakas在他的个人博客中对这一问题提供了很好的解决方案。原理其实很简单,即在HTML文档流中仅加载一个尺寸较小的javascript外部文件,同时我们把其余的javascript代码存储为一个尺寸较大的外部文件。我们在那个尺寸较小的文件中我们编写一段代码,该代码利用DOM动态地向HTML Document中插入script节点以加载尺寸较大的那个外部文件。就这么简单!关于该解决方案的详细探讨,请参考Zakas的文章The Best Way to load external JavaScript .

好了,言归正传,现在来说说IE在此处的一个bug吧~我当时写了一个测试脚本来测试如何动态加载js外部文件,该脚本首先创建一个文档碎片(Document Fragment)对象:

var fragment = document.createDocumentFragment();

作者  | 2009-8-5 23:29:25 | 阅读(196) |评论(0) | 阅读全文>>

YUIDoc的使用方法小结

2009-7-30 22:33:14 阅读150 评论0 302009/07 July30

一.YUIDoc概述以及安装

YUIDoc是为YUI Library用来生成HTML版API文档的一系列工具集,文档的生成完全基于JavaDoc风格的代码注释规则。该工具是基于Python语言编写,并且使用了几个基于Python的扩展组件作为底层支持,如读写json对象、HTML模板管理以及源代码着色等等。所以在使用YUIDoc之前,请确保你的机器上已经安装了Python环境和YUIDoc所依赖的Python扩展组件,详述如下:

Python 2.3+

simplejson - 提供读写json对象支持(Python扩展)cheetah     - 为生成HTML文档提供模板支持(Python扩展)pygments  - 源代码着色工具(Python扩展)(tips: 如果你对Python语言不熟,那也没有关系,python扩展的安装方法是非常简单的。如果是Windows环境,首先为Python设置一下环境变量Path,即

作者  | 2009-7-30 22:33:14 | 阅读(150) |评论(0) | 阅读全文>>

如何解决JDeveloper启动时不能创建jvm实例的问题(2)

2009-6-15 15:36:17 阅读280 评论0 152009/06 June15

在上一篇日志(即”如何解决JDeveloper启动时不能创建jvm实例的问题(1)“)中介绍了如何解决由于不能创建jvm实例而导致JDeveloper不能成功启动的问题。经笔者测试,使用这种方法尽管可以达到成功启动IDE的目的,但是仍然存在这致命的问题:由于MaxPermGen被设小导致JDeveloper在运行ADF应用程序是严重的内存不足,同时在设计应用程序时也会存在类似的问题。这导致JDeveloper经常性地弹出警告窗口来提示用户增加MaxPermGen的值,严重的时候甚至会导致JDeveloper假死(晕-_-')。

后经笔者再次查找资料,发现修改另一个配置文件亦可以达到目的并且假死和频繁弹出警告窗口的问题均可解决,方法如下:

1. 去<JDEV_HOME>\ide\bin\下找到ide.conf配置文件(注:<JDEV_HOME>代表JDeveloper默认的安装路径,如C:\Oracle\Middleware\jdeveloper)

2. 修改AddVMOption  -Xmx512M值为AddVMOption  -Xmx256M

3. 保存ide.conf文件并重启JDeveloper

参考资料:http://www.javaeye.com/wiki/topic/406977

作者  | 2009-6-15 15:36:17 | 阅读(280) |评论(0) | 阅读全文>>

如何解决JDeveloper启动时不能创建jvm实例的问题(1)

2009-6-15 11:40:52 阅读958 评论1 152009/06 June15

今天打开电脑启动JDeveloper时突然报出这样的错误:

Unable to create an instance of the Java Virtual Machine located at path: ..\..Oracle\Middleware\jdk160_05\jre\bin\client\jvm.dll

多次查找原因后未果,而后求救于网络,最后给出的解释是由于Java虚拟机(JVM)的一个参数MaxPermSize设置过大(为啥大了还不行-.-')导致jvm无法启动,解决得方法就是修改此参数值。JDeveloper是通过读取其安装目录下的<JDEV-HOME>\jdev\bin\jdev.conf配置文件来获得该参数的(注:<JDEV-HOME>代表JDEVeloper默认的安装路径,如C:\Oracle\Middleware\jdeveloper),所以我们找到该文件后修改其AddVMOption  -XX:MaxPermSize的值由256M(默认值)为128M,保存后重新启动JDeveloper即可解决该问题。

参考资料:

1. 方法来源:http://forums.oracle.com/forums/message.jspa?messageID=1062211

作者  | 2009-6-15 11:40:52 | 阅读(958) |评论(1) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 
 
 

上海市 浦东新区 摩羯座

 发消息  写留言

 
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 
 
博友列表加载中...
 
 
 
 
 
 
 
列表加载中...
 
 
 
 
 
 我要留言
 
 
 
留言列表加载中...
 
 
 
 
 
 
 
日志评论
评论列表加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2012

   
创建博客 登录  
 关注