??xml version="1.0" encoding="utf-8" standalone="yes"?>
今天都在折腾project explorerQ主要是在RCP里加入project explorer以后Q不能正常显C,同时h的时候又清空那个viewQ非常奇怪?br />
最后按照eclipse.org的help的指D|成功,
http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/cnf.htm
主要是要在自qWorkbenchAdvisorc里面重写的initialize(IWorkbenchConfigurer configurer)的方法?br />
2 IDE.registerAdapters();
3 final String ICONS_PATH = "icons/full/";
4 final String PATH_OBJECT = ICONS_PATH + "obj16/";
5 Bundle ideBundle = Platform.getBundle(IDEWorkbenchPlugin.IDE_WORKBENCH);
6 declareWorkbenchImage(configurer, ideBundle,
7 IDE.SharedImages.IMG_OBJ_PROJECT, PATH_OBJECT + "prj_obj.gif",
8 true);
9 declareWorkbenchImage(configurer, ideBundle,
10 IDE.SharedImages.IMG_OBJ_PROJECT_CLOSED, PATH_OBJECT
11 + "cprj_obj.gif", true);
12
13 super.initialize(configurer);
14 configurer.setSaveAndRestore(true);
15 }
16
17 private void declareWorkbenchImage(IWorkbenchConfigurer configurer_p,
18 Bundle ideBundle, String symbolicName, String path, boolean shared) {
19 URL url = ideBundle.getEntry(path);
20 ImageDescriptor desc = ImageDescriptor.createFromURL(url);
21 configurer_p.declareImage(symbolicName, desc, shared);
22 }
然后是覆盖getDefaultPageInputҎ(gu)如下
2 public IAdaptable getDefaultPageInput() {
3 return ResourcesPlugin.getWorkspace().getRoot();
4 }
q次得到的教训就是以后有什么问题首先查询eclipse.orgQ要不浪费太多时间了(jin)?br />
准备阶段最重要是关于HTML/CSS和Javascript如何协作的问题?/p>
览器初始化序是首先脚步,然后是statementsQ最后是html?/p>
如果在js里面直接引用body里面的element׃(x)报错Q最好是?strong>执行脚本攑ֈ函数里调?/span>?/p>
一些常见的钩子 idQ创建钩子最单的Ҏ(gu)Q每个id在文档中只能使用一ơ?img id="Code_Open_Image_223900" style="display: none;" onclick="this.style.display='none'; Code_Open_Text_223900.style.display='none'; Code_Closed_Image_223900.style.display='inline'; Code_Closed_Text_223900.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" align="top" height="16" width="11" />
classQ可以ؓ(f)一pd的元素初始化相同的行为?/p>
自定义属性:(x)即不属于(X)HTML规范的属性,q是不合法的Q但有时Z(jin)脚本的方便用它?/p>
?值对Q即写成如下的Ş式,然后从className中通过操作字符串获取状态?/p>
准备面Q设|事件处理程序,定讉K者状态,讄讉KQ生内容,定义关系(relatedElement)Q修Ҏ(gu)档结构?/p>
<script>标签 defer属性:(x)表示正在加蝲中的脚本不包含Q何会(x)改变HTML的指令(如document.writeQ。Explorer仅在面已经完全加蝲之后才会(x)执行拥有defer属性的脚本?/p>
XHTML规定包含内容的script标签必须定义成CDATAQ它?x)告诉XML/HTML解释器不要解析这些内容,而是直接送给脚本引擎?/p>
所有的脚本都被注册到HTML的全局对象中,同一个变量可以在多个脚本中用,且ؓ(f)最后定义的那个?/p>
当浏览器遇到script标签Ӟ发送一个HTTPh去获取脚本文Ӟ解析其中的脚本,对HTML面的分析和渲染暂停Q直到脚本加载完成?/p>
load事g?x)在面完全加蝲时触发,window.onload = ; 多次讄onload?x)覆盖之前的讄Q需要编写函数在同一个元素上讄多个事g处理E序?/p>
{待load时会(x)因ؓ(f)囄{造成延迟Q这个问题很难解冻I目前只有Mozilla支持的DOMContentLoaded事gQ在文档加蝲完成后执行,不必{待囄?/p>
每种览器都包含一个代码引擎或渲染引擎Q它负责解释Web面上的代码Qjavascript解释器是其中的一部分?/p>
Netscape4惨|之后Q网景公怺1998q创立了(jin)Mozilla目Q开发了(jin)Gecko引擎Q现在它支持着Mozilla, Firefox, Netscape, Camino{浏览器?/p>
Explorer的代码引擎叫做TridentQ?999q?月发布的Explorer5.0是第一个支持W3C DOM和XMLHttpRequest的浏览器Q但也是最后一个包含了(jin)主要Javascript更新的Explorer版本?/p>
Safari?003q发布,它用KHTML代码引擎Q它是Macintoshq_的默认浏览器?/p>
Opera是一个独立的览器,在浏览器大战期间Q它没有实现DHTMLQ现在看来,q是一个相当英明的军_?/p>
4U兼Ҏ(gu)问?/p>
不支持:(x)q些出现问题的功能不?#8220;不可或缺”的基功能Q都能够通过对象(g)判断,而且览器也在努力消除这些问题,如document.sytleSheets来读写整个样式表Q目前Safari和Opera也增加了(jin)对其的支持?/p>
合理的不同看法:(x)如defer属性对加蝲脚本的要求,Exploer有独特的理解Q幸好这U问题是最有的?/p>
有意Z的兼Ҏ(gu)问题:(x)通常是浏览器大战的遗留问题,也可以通过对象(g)来判断Q一旦微软着手实现W3C事g标准Q最后一批被故意造成的兼Ҏ(gu)问题也得到解冟?/p>
览器bugQ这是由于编E的~陷造成的不可预见的错误Q它是无法解决也是无法衡量的。如Exploer6?x)被normalize()Ҏ(gu)D崩溃?/p>
览器兼Ҏ(gu)问题是单纯的生zȝ事实Q它不会(x)L消失Q应该尽快地?fn)惯它,臛_听Q它?/p>
在Q何情况下都不要先为某一个浏览器写脚本,然后增加其他览器的支持。在目支出应该解册些兼Ҏ(gu)问题,而不是放在最后?/p>
对象(g)?/p>
对象(g)是避免兼容性问题的最?jng)_手。它的一般方法是(g)查想使用的对象,看它们是否存在,如果不存在,q束函数。(if(!对象)Q,从技术上_(d)对象(g)是把一个对象{换成一个布?yu)(dng)倹{?/p>
(g)查W3C DOMQ?/p>
对W3C DOM的检我们可以L假设览器也支持相关的功能,如appendChildQ而省d它的(g)查?/p>
事g处理试Q?/p>
我们期望未来的版本用标准,所以对标准的支持应该最先检查,事实上先(g)查attachEventQFx{浏览器?x)报错?/p>
览器检?/p>
Z么浏览器(g)行不通?览器兼Ҏ(gu)模式是不断变化的,今天不支持的属性,明天可能?x)支持;而且览器常怼(x)伪装自己的n份,以便通过览器检?/p>
览器检的军备竞赛 navigator.userAgent中保存了(jin)每一个浏览器的识别字W串?995q前后的Mosaic和Netscapeq代中,׃
Netscape的cookie?lt;center>标签{的支持Q服务器端的E序员决定用浏览器(g)来区分两种览器,他们(g)识别字W串
是否从Mozilla/开始,q给javascript世界带来?jin)不必要的磨难。浏览器厂商被迫自q识别字符串变成从Mozilla/开始,即便?
Explorer最初进入市(jng)场时也将自己伪装成了(jin)Netscape。浏览器大战开始后QW(xu)eb开发者们做出反应Q他们创Z(jin)更多的浏览器E序来区?
Netscape和ExploerQ而当战争l束Ӟ已经有数不清的网站设|了(jin)(g)脚本只允许Explorer讉KQ历史重演了(jin)Q一些浏览器?
OperaQ又不得不修改自q识别字符串来匚wExplorerQ甚臛_识别字符串的讄开攄用户?/p>
拆解览器字W串 W一个是Mozilla1.7.12Q第二个是NT5.1(即XP)的Explorer6.0Q第三个是Safari1.3.2Q第四个是伪装后的Safari1.3.2?/p>
userAgentQ用navigator.userAgentQ而不是navigator.appName和navigator.appVersion。前者尚有一些遵循,后者都是谎aQ?/p>
Mozilla/Q只能证明浏览器?994q后发布的; /[version number]Q没有意义,每一个现代浏览器都生命是W?版或W?版的MozillaQ?/p>
不规则字W串Q通常被圆括号包围Q包含这非常复杂的羃写; OperaQ唯一支持window.opera属性,可以(g)这个对象来判断Q?/p>
Safari, iCab和KonquerorQ不像Opera那样勇于承担风险Q它们可以完全地伪装自己Q?/p>
GeckoQMozilla识别串通常都会(x)包含GeckoQ但不幸Safari{也包含Q?/p>
MSIEQ没有意义,l大多数的浏览器都包含MSIEQ?/p>
版本P(x)Exploer和Opera允许在名字后面找到自q版本P而其他浏览器都无效,比如Mozilla的隐藏版本; 操作pȝQWindows操作pȝ都以Win开始,当然q不适用于伪装的丌Ӏ?/p>
(http://www.quirksmode.org/js/detect.html) 览器检的正确使用 当你需要知道访问者的览器,如站点统计时Q这些检不?x)?jing)响脚本逻辑?/p>
当我们用对象(g)时需要排除浏览器bug{时Q可以将对象(g)和览器检一起用?/p>
调试 Mozilla有最好的错误信息Q因此多在Mozilla中调试; 使用returnQalertQconfirm是不错的Ҏ(gu)Q复杂的调试可以自己创徏一个错误控制台Q?/p>
bug报告l浏览器厂商?span style="color: #000000;">
var x = document.getElementById('test');
x.onclick = function () {alert('Hello world!')};
}
window.onload = initializePage;
for (var i=0; i<lists.length; i++) {
if (lists[i].className != 'menutree') continue;
//初始化行?/span>
}
//<![CDATA[
alert('Hello World!');
//]]>
</script>
if (obj.addEventListener) //W3C
obj.addEventListener(evt, fn, false);
else if (obj.attachEvent) //微Y
obj.attachEvent('on' + evt, fn);
}
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/312.8 (KHTML, like Gecko) Safari/312.6
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2)
W二?大背?/span> javascript嵌入在一个还同时使用着HTML和CSS的环境中?/span> 2002q_(d)Stuart Langridge提出无R入脚本编E?unobtrusive scripting)。它代表?jin)向ZCSS的、兼Ҏ(gu)准的Web站点的新理论中嵌入Javascript的首ơ认真的试?/span> 它应该是可用的。即l网站带来明的可用性好处?/span> 它应该是可访问的。如果javascript失效Q网应该依然是可阅d可理解的?/span> 它应该是Ҏ(gu)实现的。Web开发者只需要在面中引入脚本本w和一个Javascript钩子Q脚本就能运行?/span> 它应该是分离的。只存在于自q.js文g中,而不是散落在HTML中?/span> 一个Web面由如下三个层l成QHTMLl构层、CSS表现层、Javascript行ؓ(f)层?/span> 表现与结构的分离 所有的表现定义在一个单独的CSS文g中,HTML中不再出?lt;font>标签和用于表现的表格。一般通过脚本改变className来引用不同的 CSS元素?/span>CSS (display:
none)用来表示文档中的某个元素隐藏Q也可以通过脚本从文档中删除q个元素。至于采用哪U方式,PPK推荐采用后一U方式。特别是对于form表单的时候,采用W一U方式就?x)提交很多无用的信息?br />
行ؓ(f)与结构的分离 所有的javascript函数都被攑֜一个独?js文g中,然后把它铑օ所需要它的HTML面中,HTMLU除所有的事g处理E序?/span> 钩子(hook)用来生命“在这里准备部|行?#8221;的IDQ它是注册事件处理程序的一U方法?/span> javascript:伪协议是复杂而肮脏的(<a href="javascript:dosomeaction()">)Q应该放到脚步文件中?br />
行ؓ(f)和表现的分离 行ؓ(f)和表现的分离是复杂的Q尚没有M的标准?/span> 当若q元素部|相同的效果ӞCSS是有效的Q而需要创建相g不完全相同的效果Ӟjavascript是最有效的方法?/span> 可访问性规?/span> 条理分明的HTMLQ如编码的链接必须有href?/span> 产生对脚本用h意义的内容,如:(x) 一条发送ajaxh的链接可以完全用javascript生成Q这h脚本用户׃?x)看到href?的a标签而生不解; 用javascript来隐藏一D内容,而不是用cssQ否则无脚本用户永q看不到那是什么; 判断是否脚本可用Q然后蟩转到一个无脚本面Ӟ要用location.replace而不是location.hrefQ这样在后退时不?x)再q回到有脚本面Q事实上location.href产生?jin)一条历史记录; 针对键盘用户Q我们对触发事g的元素增加focus动作Q?/span> ׃各浏览器都支持(但不完全支持QjavascriptQ因?lt;noscript>标签显得没有意义,最好完全不用?/span>
javascript的目标是lWeb面增加一个额外的可用性层?/span>
js分ؓ(f)6个部分:(x)javascript核心(j)、BOM(览器对象模?、事件、DOM(文档对象模型)、CSS修改、数据检?XMLHttpRequest)?/span>
他们的Q务:(x)核心(j)使得js成ؓ(f)一门编E语a的基Q控制结构变量函数和? 象;BOMl浏览器H口下达指o(h)Q读取cookieQ与其他H口q行通信Q事件找出用h行的动作Qƈ定义q些动作触发的函数QDOM学习(fn)和改? HTML文档的结构;CSS学习(fn)和改变HTML文档的CSS表现Q数据检索从服务器下载新的数据而不h面?/span>
所有的脚本都是用核?j)语a、事件和DOMQ等待行动,q更新页面?/span>
ECMA(Ƨ洲计算机制造联合协?对javascript核心(j)q行标准?ECMA1.5)Q这个标准应用到flash、浏览器、服务器以及(qing)其他未产生的应用上?/span>
W3C(万维|协?创徏?jin)DOM规范Q它也包括事件处理和CSS修改的内宏V微软仍然没有实现W3C的事件规范,却用它自己专有的事件模型?/span>
WHAT-WG(Web文本应用技术工作组)正ؓ(f)BOM标准而工作?/span>
数据(g)索用的则是微Y的事实标准,W(xu)3C为数据检索推Z(jin)XMLHttpRequest规范的第一部草案?/span>
<script标签中允许在language="javascript1.2"中指定版本号Q但?.2版本开始Netscape和Explorer 4都宣U支持,因此讄版本h有意义,事实上根本不需要这个属性?/span>
js遵@严格的安全规?/span>
不允许访问宿主计机Q不能读写除cookie外的文gpȝ
同源{略Q两个窗口的面的Web域名必须相同Q才允许跨窗口通信。同子域下可以通过讄相同的document.domain(必须讄为真实域名的一部分)q行通信?/span>
其他限制Q不能读取历史对象的属?当可以在历史中后退)Q不能设|文件上传表单域的|试图关闭H口时会(x)询问用户Q不允许打开一个小?00x100或处于屏q之外或没有标题栏的新窗口?/span>
javascript的历?/span>
创始人Brendan Eich当时在Netscape工作Qjs公开的历史从1996.3的Netscape2发布开始?/span>
Eich最初的目标是ؓ(f)Web开发者提供一U简单的方式为页面增加一些交互,q些 脚本从其他页面复制过来ƈE作调整可以用。最初命名ؓ(f)LiveScript。但NetscapeZ?jng)场的考虑选取?jin)一个与当时行的Java怼? 一个名字,q仓?j)地要求Eich“使这个语a看v来想Java”Q从而误gh们将js视ؓ(f)轻量U的Java版本Q看成一个可以拿来搬弄技巧而不值得引v? 谨的E序员注意的dy的脚本语a?/span>
W一瘦时?/span>
早期的日子里Q浏览器是一个瘦客户端,表单验证和鼠标滑q的效果是o(h)人惊艳的Q但它们不允许在客户端大量进行交互,用户被迫与服务端交互?/span>
1996~1999间Netscape与微软的览器大战开始,双方都推?gu)q W?版,Z夺CSS规范各不相让。两个浏览器厂商都让javascript可以控制q些CSS声明Q于是就可以使用position:absolute 创徏一?#8220;?#8221;Q然后通过持箋地改变top和left似的它在屏幕上移动,q才叫酷Q这些小伎俩被冠以DHTMLZh所知,即通过javascript? 改变css属性?/span>
为此双方都推Z(jin)自己专有的DOMQ又U过渡DOMQ介于Netscap3DOM和W(xu)3CDOM之间Q,Netscape4支持document.layersQ而Explorer支持document.all?/span>
W一个胖阶段
有了(jin)q些新特性,客户端增加大量的互动Q动甅R隐藏和其他视觉效果Qjavascript的目标{向技术,而不是可用性,jsq入胖阶Dc(din)?/span>
微Y?999q发布Explorer5Q相当好地支持了(jin)CSS和新的W3CDOM标准。尽公司和W(xu)eb开发者尽力挽救,Netscape4q是灭亡?jin),差不多同一旉Qjs的第一个胖阶段l束Qh们发现的不过是少量的javascript和大量的I?/span>
CSS变革开始?/span>
W二个瘦阶段
览器大战接q尾声的时候,W(xu)eb开发者们厌倦了(jin)大量的编E和变通做法,极度地想从头开始。CSSQ而不是javascriptQ给?jin)他们最好的Z(x)来完全突破过ȝ束缚(x)?/span>
大概?003q开始,一部分先锋开始用一U深受CSS革命理念影响的新方式写javascriptQjavascriptW一ơ深深地潜入到全面的Web开发理Z去,而可讉K性问题终于被认识到ƈ着手解冟?/span>
无R入脚本编E提出,但ƈ没有立即征服世界?/span>
W二个胖阶段
从服务器端?zhn)?zhn)地载入块的数据,唤醒?jin)沉睡多q的技术构思和可用性观 念,Jesse James Garrett的文章《AjaxQWeb应用E序的新Ҏ(gu)》开创了(jin)Ajax时代Qjavascript的用途又一ơ被重新定义Q传lweb开发者创建的? 瘦的可访问的qp的js代码Q而来自服务端开发的“资深E序员们”创徏的是面向对象的,胖的Q可讉K性差的ajax客户端。焦点又被集中在技术方面,? 用性及(qing)Z么要用ajax仍很被xQ臃肿的?xӞ(j)与日俱增?/span>
所q思h们都开始同意ƈ遵@已经存在的标准?/span>
2006.5数据昄Q目前共有至?34中Ajax框架Q我个h认ؓ(f)q股热潮已经到达?jin)顶峎ͼ有谁需?34U程序去做本质上是一L(fng)事呢Q?/span>
javascript调整回瘦阶D,那时它的用途也再ơ被重新定义Q当然某个时期第三个瘦阶D늻束后?x)迎来第三个胖阶D?. 从根本上Q这U情况只有当每个人都只认同唯一的javascript用途时才会(x)被打破?/span>