script_scripting - CSDN
精华内容
参与话题
  • 三、<script>元素定义的6个属性。 一、在HTML中引用JavaScirpt脚本的方法有两种:内部嵌入和外部引用。 关于<script>标签的位置问题,虽然<script></script>可以放在...

    一、在HTML中引用JavaScirpt脚本的方法有两种:内部嵌入和外部引用。

    关于<script>标签的位置问题,虽然<script></script>可以放在<head></head>里面,也可放在<body></body>里面,但为了避免浏览器加载延迟,最好是放在</body>前面。

    1. 内部嵌入:直接在HTML文档内使用<script></script>标记对引入。
    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>标题</title>
    </head>
    
    <body>
    <div>
    <p>内容</p>
    </div>
    <script type="text/javascirpt">
    //脚本语句···
    </script>
    </body>
    </html>
    

    Tips:虽然现在已被告知可不再写 type=“text/javascript” 属性,因为现在即使不指定这个属性,其默认值仍为 “text/javascirpt” 。但,个人建议还是要习惯性加上,写上可以明确指示浏览器按照何种脚本以及何种版本加载和解析脚本,可以有效避免兼容性或者版本差异造成的错误。

    1. 外部引入:通过src属性指定外部JavaScript文件链接。
    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>标题</title>
    </head>
    
    <body>
    <div>
    <p>内容</p>
    </div>
    <script type="text/javascript" src="javascript.js"></script>
    </body>
    </html>
    

    这里使用 src 属性引入javascript.js的JS文件,建议js文件和html文件放在同一个目录里,这样写 src 地址就不用这么长这么麻烦了。而在js文件里面,无需写<script type="text/javascript"></script>了,直接开始js脚本的编写:

    document.write("Hello World!");
    
    //等等js
    

    Tips1:src 属性还可以包含来自外部域的JavaScript文件。它的 src 属性可以是指向当前HTML页面所在域之外的某个域中的URL。

    <script type="text/javascript" src="http://www.xxx.com/xx.js"></script>
    

    Tips2:除了通过外部URL引入js脚本,还可以通过伪URL引入。伪URL地址的格式一般以 "javascript:"开始,后面紧跟要执行的操作。

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>标题</title>
    </head>
    
    <body>
    <div>
    <p>伪URL地址引入JavaScript脚本实例:</p>
    </div>
    <input type="text" name="text" value="鼠标单击" onclick="javascript:alert('鼠标已单击文本框!')">
    </body>
    </html>
    

    ◆在HTML中嵌入JavaScript代码虽然没有问题,但一般认为最好的做法还是尽可能使用外部文件来包含JavaScript代码。
    优点:
    ①可维护性:遍及不同HTML页面的JavaScript会造成维护问题。但把所有JavaScript文件都放在一个文件夹中,维护起来就轻松多了。而且开发人员因此也能够在不触及HTML标记的情况下,集中精力遍及JavaScript代码。
    ②可缓性:浏览器能够根据具体的设置缓存链接的所有外部JavaScript文件。也就是说,如果有两个页面同时使用一个文件,那么这个文件夹只需下载一次。因此,最终结果就是能够加快页面加载的速度。
    ③适应未来:通过外部文件来包含JavaScript无须使用XHTML或注释hack。HTML和XHTML包含外部文件的语法是相同的。

    二、在同一个HTML文档中,调用多个JavaScript脚本。

    1. 内部嵌入:
    <script type="text/javascript">
    //第一个js
    function test1()
    {
    	alert("test1");
    }
    
    //第二个js
    function test2()
    {
    	alert("test2");
    }
    </script>
    
    1. 单个外部js文件:
    //第一个js
    function test1()
    {
    	alert("test1");
    }
    
    //第二个js
    function test2()
    {
    	alert("test2");
    }
    
    1. 多个外部js文件引入:
    <scirpt type="text/javascript" src="xx.js">
    <script type="text/javascript" src="xy.js">
    <script type="text/javascript" src="yy.js">
    

    Tips:关于多个JavaScript文件的调用,会有冲突问题,不过现在还没涉及到,涉及到了,再补充。

    三、<script>元素定义的6个属性。

    1. async:可选。表示应该立即下载脚本,但不应该妨碍页面中的其他操作,比如下载其他资源或者等待加载其他脚本。只对外部脚本文件有效
    2. charset:可选。表示通过 src 属性指定的代码的字符集。由于大多数浏览器会忽略它的值,因此这个属性很少人用
    3. defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有效。IE7及更早版本对嵌入脚本也支持这个属性。
    4. language :已废弃。原来用于表示编写代码使用的脚本语言(如JavaScript、JavaScript1.2或VBScript)。大多数浏览器会忽略这个属性,因此没有必要再用了
    5. src:可选。表示包含要执行代码的外部文件。
    6. type:可选。可以看成是language的替代属性;表示编写代码使用的脚本语言的内容类型(也称为MIME类型)。虽然 text/javascript 和 text/ecmascirpt 都已经不被推荐使用,但人们一直以来使用的都还是 text/javascript 。实际上,服务器在传送JavaScript文件时使用的MIME类型通常是 application/x-javascript ,但在 type 中设置这个值却可能导致脚本被忽略。另外,在非IE浏览器中还可以使用以下值: application/javascript 和 application/ecmascript 。考虑到约定俗成和最大限度的浏览器兼容性,目前 type 属性的值依旧还是 text/javascript 。不过,这个属性并不是必需的,如果没有指定这个属性,则其默认值仍为 text/javascript 。

    搬运工:
    <script>在HTML文档中的位置-简书

    展开全文
  • 详细理解script标签

    千次阅读 2019-07-06 17:45:39
    说到script标签,大家耳熟能详的就是src属性了,但是你是否记得它有一些其它属性呢?接下来我仔细盘点,看看是否知道它们的含义。

    说到script标签,大家耳熟能详的就是src属性了,但是你是否记得它有一些其它属性呢?接下来我仔细盘点,看看是否知道它们的含义。

    async
    charset
    defer
    src
    type
    

    常用的就是src属性,通过指向一个外部地址来加载脚本,如果用了src属性,那么标签中的内容会被忽略,不会被执行的!!!

    <script src="test.js">
      console.log('不会执行')
    </script>
    

    script标签是没有跨域问题,可以加载任何网站的脚本,和img标签非常类似,所以通常也会用来解决跨域问题,就是人们通常所说的JSONP。

    charset表示字符集,是可选的参数,默认utf-8编码。type是内容类型,是可选的参数,默认是text/javascript。 这两个属性了解即可,略过…

    默认script标签都是同步加载脚本的,因为脚本之间存在依赖关系,只要前面的执行完毕才能执行后面的代码。但是如果脚本之间没有必然的关系,那么一般会选择异步加载脚本来提高效率,需要使用async属性。

    <script src="test.js" async>
    </script>
    

    async要和src属性配合使用。因为只对外部脚本起作用,如果你是在script标签里面书写脚本,该脚本是不会异步加载!!!

    还有一个是defer属性,表示延迟执行,具体意思是当页面解析和显示之后再执行。这个属性也是针对外部属性才起作用。

    异步脚本一定会在页面的load事件前执行完毕,但是可能会在DOMContentLoaded事件触发之前或者之后执行。

    展开全文
  • HTML中script标签

    千次阅读 2019-03-05 17:07:36
    一、script标签中的属性 async:在script标签中添加此属性,浏览器会开启异步下载脚本(执行到当前标签后立即下载),当下载完成后立即执行,但并不会按着script在页面中的顺序来执行,而是谁先加载完谁执行。...

    一、script标签中的属性

    async:在script标签中添加此属性,浏览器会开启异步下载脚本(执行到当前标签后立即下载),当下载完成后立即执行,但并不会按着script在页面中的顺序来执行,而是谁先加载完谁执行。DOMContentLoaded事件的触发并不受async脚本加载的影响,在脚本加载完之前,就已经触发了DOMContentLoaded

    charset:此属性很少使用,指定src属性中加载的代码属性的字符集(如UTF-8)

    defer:在script标签中添加此属性,表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有效。如果script标签设置了该属性,则浏览器会异步的下载该文件并且不会影响到后续DOM的渲染;如果有多个设置了deferscript标签存在,则会按照顺序执行所有的script(但现实上并一定会按照顺序执行,也不一定会在dom加载完成后再执行,因此最好只添加一个defer)defer脚本会在文档渲染完毕后,DOMContentLoaded事件调用前执行。

    language:目前大多数浏览器已经弃用了这个属性。表示src属性中引入资源的语言类型

    src:指定要加载的外部的资源属性

    type:指定脚本类型的语言。虽然text/javascript和text/ecmascript都以不在被推荐使用,但仍有部分其他需要,如es6使用babel时text/babel。另外服务器在传送javascript文件时使用content-type类型是application/x-javascript,但type属性将无效。在非IE浏览器中还可以使用content-Type还可以使用application/javascript和application/ecmascript。

    注意:外部javascript文件带有.js扩展名。但这个扩展名不是必须的,因为浏览器不会检查包含javascript的文件扩展名。因此,使用JSP、PHP等服务端语言生成javascript语言成为了可能。浏览器端返回文件基于http请求的content-type的类型,因此需要服务器端返回正常的MIME类型。

    三、noscript标签

    用于不支持javascript的浏览器或者关闭javascript功能的浏览器,展示在noscript标签中的内容。

    <noscript>
       <p>请开启浏览器支持javascript</p>
    </noscript>

    三、文档模式

    IE5.5引入了文档模式的概念,该模式可以通过html的doctype进行切换。最初的文档模式只有:混杂模式(quirks mode)和标准模式(standards mode)。混杂模式会让IE的行为与(包含非标准特性的)IE5相同,而标准模式则让IE的行为更接近标准行为。这两种模式主要影响css内容的呈现,但在某些情况下也会影响到javascript执行。

    随着IE文档模式的引入,其他浏览器厂商也纷纷效仿。之后IE又提出了准标准模式(almost standards mode)。这种文档模式很多行为都符合标准模式,除了图片的间距的时候。

    在文档开始处如果没有发现文档类型声明,则所有浏览器都会默认开启混杂模式。开启混杂模式之后,不同的浏览器在这种模式下行为差异非常大,因此不建议开启该模式

    标准模式:

    <!--HTML 4.0.1 严格型 -->

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

    <!-- XHTML 1.0 严格型 -->

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

    <!-- HTML5 -->

    <!DOCTYPE html>

    准标准模式:

    <!--HTML 4.0.1 过渡型 -->

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

    <!--HTML 4.0.1 框架集型 -->

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
    "http://www.w3.org/TR/html4/frameset.dtd">

    <!-- XHTML 1.0 过渡型 -->

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
    http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <!-- XHTML 1.0 框架集型 -->

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

    四、浏览器渲染html的过程

    下方内容转载自:https://blog.csdn.net/qq_42269433/article/details/81133772

     1. 浏览器把获取到的html代码解析成1个Dom树,html中的每个tag都是Dom树中的1个节点,根节点就是我们常用的document对象 。dom树里面包含了所有的html tag,包括display:none隐藏,还有用JS动态添加的元素等。

     2. 浏览器把所有样式(主要包括css和浏览器的样式设置)解析成样式结构体,在解析的过程中会去掉浏览器不能识别的样式,比如IE会去掉-moz开头的样式.

    3. dom tree和样式结构体(cssom)结合后构建呈现树(render tree),render tree有点类似于dom tree,但其实区别有很大,render tree能识别样式,render tree中每个node都有自己的style,而且render tree不包含隐藏的节点(比如display:none的节点,还有head节点),因为这些节点不会用于呈现,而且不会影响呈现的,所以就不会包含到 render tree中。

    注意: visibility:hidden隐藏的元素还是会包含到render tree中的,因visibility:hidden 会影响布局(layout),会占有空间。

    4.1、dom树结构,cssom,renderTree

    CSSOM  :  样式表解析完毕后,系统会根据选择器将CSS规则添加到对应的哈希表中。这些哈希表包括:ID哈希表、类名称哈希表、标记名哈希表等,还有一种通用哈希表,适合不属于上述类别的规则。如果选择器是ID,规则就会添加到ID表中;如果选择器是类,规则就会添加到类表中。

    4.2、cssom和dom树怎么匹配结合成renderTree

           (以dom节点匹配cssom)

           从本渲染结点开始,判断此结点是否与选择器链表的当前选择器相匹配。如果匹配,判断此选择器与下一个选择器的关系:如果为NONE,表示本选择器是选择器链的最后一个,返回成功;如果关系为AND (比如:#id.class),选择下一个选择器与本渲染结点继续比较;如果关系为CHILD,表示本选择器是下一个选择器的子结点,返回下一个选择器与下一个渲染结点的匹配结果;否则,关系为DESCENDANT,选择器和渲染结点各指向下一个结点,然后将渲染结点继续回溯,直到第一个满足回溯后的选择器的结点,此时将继续判断回溯后的选择器和回溯后的渲染结点是否匹配。
             4.3、回流与重绘

    当render tree中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流。每个页面至少需要一次回流,就是在页面第一次加载的时候

    当render tree中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的,比如background-color。则就叫称为重绘。

    4.4、哪些情况会发生重绘,回流

    --不同的条件下发生重排的范围及程度会不同 :

    (1).页面初始渲染

    (2).改变字体,改变元素尺寸(宽、高、内外边距、边框,改变元素位置等

        各种情况:

                 设置 style 属性的值 

                 激活 CSS 伪类,比如 :hover

                 操作 class 属性

                css3的某些属性(https://csstriggers.com/  结合此链接查看哪些属性会触发重排、哪些属性会触发重绘以及哪些属性会触发合成;)

              (注意:如果修改属性不影响布局则不会发生重排)

    (3).改变元素内容(文本或图片等或比如用户在input框中输入文字)

    (4).添加/删除可见DOM元素(注意:如果是删除本身就display:none的元素不会发生重排;visibility:hidden的元素显示或隐藏不影响重排)

    (5).fixed定位的元素,在拖动滚动条的时候会一直回流

    (6). 调整窗口大小(Resizing the window)

    (7).计算 offsetWidth 和 offsetHeight 属性【注释2】

    【注释2:flush队列】

    浏览器是聪明的,当对以下属性进行操作的时候:

    包括:offsetTop、offsetLeft、 offsetWidth、offsetHeight、scrollTop、scrollLeft、scrollWidth、scrollHeight、clientTop、clientLeft、clientWidth、clientHeight、getComputedStyle() (currentStyle in IE)。

    浏览器不会马上操作它们,而是会先缓存在队列中,有一定时间顺序去执行这些操作,但是在这过程中我们需要去获取在该队列中的属性时,浏览器为取得正确的值就会触发重排。这样就使得浏览器的优化失效了。

    所以,在多次使用这些值时应进行缓存。
     

     

    展开全文
  • Script# 入门

    千次阅读 2008-04-06 18:42:00
    Script# 入门 Script#是和以前的Altas一起出来的项目,就是可以在客户端编写C#,如RJS允许你使用Ruby来编写客户端的脚本,Google Web Toolkit使用Java,但Nikhil Kothari的Script# 允许你使用C#来写客户端的脚本,...
    
    	

    Script# 入门





    Script#是和以前的Altas一起出来的项目,就是可以在客户端编写C#,如RJS允许你使用Ruby来编写客户端的脚本,Google Web Toolkit使用Java,但Nikhil Kothari的Script# 允许你使用C#来写客户端的脚本,Script#多美丽的名字,需要一次平静中的爆发。

    现在就来翻译一篇ScriptSharp Version0.4.40(2007.10.24发布的版本)中的一些关键内容.

    内容有一点多大概分5个部分:


    一:介绍Script#
    二:介绍它的Script# Framework
    三:Hello World程序
    四:Ajax 的Hello World程序
    五:使用Script# Class Library


    --------就请多指点,谢谢关注-------------------




    Introduction



    Script#是一个C#的编译器,只不过它产生的是JavaScript,而不是MSIL,为使用在Web applications或其Script-based application如Windows Vista Sidebar gadgets .Script#的主要目的是提供一个为AJAX application的,一个更有生产力的script环境,更为易读,而且渴望在团队开发中表现形式上像C#开发模型:


    1:在编译时可以类型检测和构建错误检测.


    2:Natural OOP-style programming


    3:C#IDE新特性和形式,如intellisense, refactoring, class browsing


    4:Doc-comments


    Script#的一个关键原则是产生的JavaScript代码更可读,更好理解,并且在任何地方都能匹配源代码.这个目标并没有抽象远离底层的script APIs(如Dom等),但能代替你直接使用它们,所以工程师会选择使用更有生产力的工具,但又不用牺牲功能或性能.最终JavaScript是一种兼容性的Script,支持现在所流行的浏览器.


    Script# 能兼容现有应该程序.它提供灵活的向现有的script libraries中导入脚本APIs如DOM,并且更好的暴露给浏览器的插件如Flash其他的ActiveX controls.这个详细的说明你可以看Importing Existing Script Libraries and Scriptable APIs section.(请看ScriptSharp.pdf)


    允许你快速开始创建一个基于Script的应用程序和组件,Script#提供支持关键的DOM APIs,和还提供允许你选择性的使用自己的高级functional framework,适应out-of-browser scenarios(脱离浏览器的场景), Script#提供很多APIs能被使用构建Sidebar gadgets 如Gadget API ,RSS feeds APIs和File System APIs .关于这些APIs的特性的描述在Script# Framework section.(请看ScriptSharp.pdf)


    Script# 的工程进化可以看Roadmap section.


    http://www.nikhilk.net/ScriptSharpIntro.aspx. 
    http://projects.nikhilk.net/Projects/ScriptSharp.aspx(下载)


    http://projects.nikhilk.net/Binaries/ScriptSharp.pdf



    What can you build with Script#?



    Script# 安装提供很多工程模版.

    (1)Script code-behind for Web pages.


      这个是使用在页面上的UI elements中的事件添加scirpt,如buttons或通过initialize script函数实现在页面对script文件的引用.
      script#介绍一个Scriptlet的概念,它的思想就是等于一个规则的客户端应用程序的"Main"方法.在运行环境的能力是被Script# Framework所提供,能被使用在a vanilla html page(不知道是什么意思)中,可是,这样就促进简化它的服务器控件的副本,已经支持ASP.NET2.0. 这个控件还提供一个设计时体验包括C# editing of code-behind.


    (2)Script# Class Library


      或许Script#共同使用最多的部分.一个类库是本质是一个API集合和压缩一些需要跨页面重用的类.而Script# Framework自己就是一个很好的事例.


       一个有规则的C#类库工程是被用来随同在添加的Script#的构建和产品发布和进行script文件的debug,并将文件添加到有规则的.Net assembly.
    最后script文件能被打包进入服务端控件,或立即被导入页面.最初.net assemblies能被用来引用到适合其他的class libary project,或被引用到Scriptlet控件.


    (3)Script# Gadget
       一个Script# Gadget是专用Class lirbrary的类型. Gadget实质是Script实现很多功能和行为的HTML页面,更像一个规则的Web页面.关键不同是在 Gadget工程引用的是一个Gadget API assembly,和实现专门的类来表现Gadget的不同部分:如主要的UI,设置页面等.



    (4)Microsoft ASP.NET AJAX-based Components, Controls and Behaviors.


       Microsoft ASP.NET AJAX 提供一个为实现components,控件和行为的core frameworks.你能使用Script# frameworks取代它.这个工作正确的就像Class Library模型样.只不同是它引用Microsoft ASP.NET AJAX runtime和core APIs现在被Script# runtime and core APIs取代了.


       编译器的功能是几乎一样.只不过一个些编译器特性也已经丧失,各种来于核心类型的APIs已经被移出,是指的是不支持Microsoft ASP.NET AJAX runtime 下,但其实Script#  framework是被支持间接的ASP.NET AJAX runtime;可是要在,如果你想要强制你的程序依靠ASP.NET AJAX runtime,这些还是允许你使用Script# 开发的方式和编译器.


    关于使用ASP.NET AJAX 模式和他的限制的描述在Using Script# with Microsoft ASP.NET AJAX.(请看ScriptSharp.pdf)


    --------------------------------------------------------


    好的现在我们先来看它的类库:如下图

    r_dllMap2.jpg
    atlas文件夹
    r_dllMap.jpg
    framework



    The Script# Framework And Class Library



    这是介绍Script# Frameworks的部分.为APIs全部的文档都来于XML doc-commments,XML doc-commments能使用像.NET Relector的工具.最终doc-commments将被编译进入帮助.


    (1)Script Type System and Base Class Library


    类型系统和基类库是表现在sscorlib.dll assembly和它的相配的是sscorlib.js script 文件.在编译器编译Script#时这些必须被引用.这个 Core Scrpit library包括扩展标准的JavaScript objects如Function, Array, String, Number, etc. 还有一些新的类型.


    类型系统库是模拟OOP架构构造了这个架构并产生了模仿C#源代码的代码.这个OOP创建包括namespaces, classes, interfaces, enumerations, and delegates .实现允许在运行环境检测类型的返回类型名,base classes,检测一个接口的实例实现的.类型系统使用JavaScript的 prototype特性来定义类.


    base class library是部分实现是扩展Object的prototype,如Array, String, Number, Date etc 等提供一个API与.Net一致,还有API用于scripting环境是超过在.NET中的能力.base class library还提供一些新的类型如StringBuilder,CultureInfo,Debug 等.还有兼容性如string formating 是简化各种用户script的表现.


    (2)Script# Framework


    Script# Framework 是assemblies的集合提供一个script-base application和编程模型.如果你有唯一性的要求,它能在Script#首先没有依赖Script# Framework时实现一个选择另外的framework.

    Core Programming Model,Networking,and UI Concepts -------ssfx.Core.dll

     


     这个assembly所提共的核心编程模型都在ScritpFX namespace中,结合一个应用程序类和描述服务如dispose mechanism, history management, session state, idle task execution, and script loading .它还结合一般使用有效类型管理事件操作,执行JSON serialization ,侦查浏览器和主机的信息等.


    ScriptFX.Net namespace 提供高级的HTTP-based networking stack 是基于HTTPRequest/HTTPResponse 类,这个有用的特性就像timeouts, request building, scheduled execution, custom caching, and monitoring hooks via a centralized HTTPRequestManager等.它还为plug 提供可扩展模型在对不同的传输方式(如 XMLHttp)执行正确的网络请求.


    ScriptFX.UI namespace提供核心底层结构类联合关于DOM 元素的script-based logic.详细它介绍控件和行为的概念.还有它为UI 元素定义的核心接口的约定.它还提供高性能扩展动画核心,使用它能在你的应用程序中制作出混合炫目的视觉效果.在未来将和其他的核心UI底层结构和服务(如  templating和 drag/drop)相一致.





    Cross-Domain AJAX using JSONP ------ssfx.XDAjax.dll


    这个assembly提供实现一个选择性的HTTPTransport,在ScriptFX.Net namespace中能在networking system中使用插件,允许你跨域请求执行(cross-domain)你所使用的script标签和 JSONP端口.




    UI Controls and Behaviers ------ssfx.UI.Forms.dll


    这个assembly提供在Web页面执行forms时,共同使用行为和控键的实现.这包含控键像TextBox, Button 等.还有高级特性如一个丰富的AutoComplete behavior, Watermark behavior ,他们能追加在放入的 textbox中.在未来,这个assembly将被提供新的特性如validation, calendar controls 等.




    Reflection Utility------ssfx.Reflection.dll


    这个assembly 提供高级像.Net样的反编译功能,在ScriptFX.Reflection namespace中,这个命名空间为了列举命名空间,类型和成员.这个能使用去实现class-browsing场景和应用程序.




    Microsoft Silverlight XAML DOM - ssagctrl.dll


    这个assembly提供APIs去制作的程序依靠Microsoft Silverlight control内部浏览.详细的就是它允许编程依靠XAML DOM在授权的AJAX 应用程序中制造脚本使用vector graphics, media and animations等提供给Silverlight control.



    Windows Vista Sidebar Gadgets-----ssgadgets.dll


    这个assembly允许编程依靠脚本的APIs去使用开发 gadgets,能运行在Microsoft Windows Vista Sidebar中.




    File System APIs-----ssfso.dll


    这个assembly提供一个metadata assembly允许程序依靠用户的RSS的存储被引用到IE7.0中.像文件系统APIs清单上,这个API只允许受信任的Web浏览器以外的应用程序使用.如 gadgets.这个APIs允许subscribing/unsubscribing to RSS feeds.和当前用户的RSS feeds中访问数据.



    Naming Convention


    你也许已经注意一个命名转换在被使用.真正的有这样一个模式.所有的assemblies名叫ssfx.*.dll表现形式是script实现的framework.所有的其他ss*.dll assemblies 表现当前的script APIs或已经被导入的script的API.
    ------------------------------------------------


    现在已经基本知道Scirpt# framework的结构和它能做些什么.具体的你可以打开的安装目录下的framework,atlas来查看.
    现在就来一个"Hello World Application"



    The Hello World Application (Using Scriptlets for Script Code-behind)



     


    第一个sample,我们将构建一个流行的Hello World Script#,和怎样增强它的AJAX特性.


    Step1:创建一个新的Script#-enabled Web site


    r_Step1.jpg
    Script# 提供一个Web site模版,避免你对于使用不同文件和配置的麻烦.所以你现在就可以开始使用Script#.


    这个Web site结构看上去你会看到Script# assemblies 是在Bin/scirpt文件夹里面和相应的debug和release scirpt文件是在App_Script folder文件夹里面.


    r_ClassMap.jpg
    Step2:添加一个HTML创建一个"Hello World" 页面


    这个Web site包括一个Default.aspx页面,包括引用server控件.这个一个控件提供Script#和我们将看到怎样帮助你所提到的两个方面(它提供的是Script#控件而不是依赖Asp.net或asp.net server controls).


    在下面的内容中是创建Web site模版中添加的default page提供的用户接口实现Hello World场景.


    ExpandedBlockStart.gifContractedBlock.gif<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Hello World Script# Styletitle> head>
    None.gif
    <body> 
    None.gif
    <form id="form1" runat="server"> 
    None.gif
    <div> 
    None.gif
    <label>Enter your Name:label> 
    None.gif
    <input type="text" id="nameTextBox" /> 
    None.gif
    <button type="button" id=”okButton”>OKbutton> <hr /> 
    None.gif
    <label id="greetingLabel">label> 
    None.gif
    div> 
    None.gif
    form> 
    None.gif
    <ssfx:Scriptlet runat="server" ID="scriptlet"> <References> 
    None.gif
    <ssfx:AssemblyReference Name="sscorlib" /> <ssfx:AssemblyReference Name="ssfx.Core" /> References> 
    None.gif
    <Code> using System; using ScriptFX; public class MyScriptlet 
    None.gif{ public static void Main(ScriptletArguments arguments) { } } 
    Code> 
    None.gif
    ssfx:Scriptlet> 
    None.gif
    body> 
    None.gif
    html>

     


    Step3:添加代码实现"Hello World"场景.


    下一步是添加logic到提取文字进入用户的nameTextbox元素中,处理它和产生一个问候语在greetingLabel元素中.
    Script#允许你在这里写C#代码,转译成JavaScript.


    在下面的切图是在IDE中你选择到design view,选择Scriptlet控件选择后出现的associated task panel.


    r_Step3.jpg
    Scriptlet服务控件提供设计时允许你编写C# code-behind,添加script和assembly引用.还有更多的方法就是你可以在客户端应用程序中编写 C#(in much the same way as you would for a regular C# client application ),你只需要选择Scriptlet面版上的 "Edit C# code".下面的切图就是C#代码编辑体验提供Server控件设计器,包括color coding, intellisense, general text ,editor特性还有change tracking, line numbers 等.


    r_Step5.jpg
    这是代码需要author添加到Scriptlet 控件内的规则的C#代码.你能看到它是规则的C#代码.


    None.gifusing System; 
    None.gif
    using System.DHTML; 
    None.gif
    using ScriptFX; public class MyScriptlet : IDisposable 
    ExpandedBlockStart.gifContractedBlock.gif

    InBlock.gif
    private DOMEventHandler _clickHandler; 
    InBlock.gif
    private MyScriptlet(ScriptletArguments arguments) 
    ExpandedSubBlockStart.gifContractedSubBlock.gif
    { _clickHandler = new DOMEventHandler(OnOKButtonClick); 
    InBlock.gifDOMElement okButton 
    = Document.GetElementById("okButton");
    InBlock.gif
    ExpandedSubBlockEnd.gifokButton.AttachEvent(
    "onclick", _clickHandler); }
     
    InBlock.gif
    InBlock.gif
    public void Dispose() 
    ExpandedSubBlockStart.gifContractedSubBlock.gif

    InBlock.gif
    if (_clickHandler != null
    ExpandedSubBlockStart.gifContractedSubBlock.gif
    { DOMElement okButton = Document.GetElementById("okButton"); 
    ExpandedSubBlockEnd.gifokButton.DetachEvent(
    "onclick", _clickHandler); _clickHandler = null; }

    ExpandedSubBlockEnd.gif }
     
    InBlock.gif
    InBlock.gif
    private void OnOKButtonClick()
    ExpandedSubBlockStart.gifContractedSubBlock.gif 

    InBlock.gifInputElement nameTextBox 
    = (InputElement)Document.GetElementById("nameTextBox"); DOMElement greetingLabel = Document.GetElementById("greetingLabel"); 
    InBlock.gif
    InBlock.gifgreetingLabel.InnerHTML 
    = "Hello " + nameTextBox.Value + "!"
    ExpandedSubBlockEnd.gif}
     
    InBlock.gif
    InBlock.gif
    public static void Main(ScriptletArguments arguments) 
    ExpandedSubBlockStart.gifContractedSubBlock.gif

    ExpandedSubBlockEnd.gifMyScriptlet scriptlet 
    = new MyScriptlet(arguments); }
     
    ExpandedBlockEnd.gif}

    None.gif

    实质上执行最开始是进入你的Scriptlet的Main方法.这个代码创建一个MyScriptlet类的实例.之后是使用DOM查找页面上id为"OKButton"的


    这个Click事件找到的id="nameTextBox"和


    MyScriptlet实例实现一个IDisposable interface ,并且执行清除,也就是清除事件和Button的关联.这个是在当页面被unload的时候自动由Script#调用的.


    代码这使用的是DHTML DOM绘制.Script#还提供高级抽象,简化UI编程,当DOMAPIs提供充分功能去实现Hello World场景.


    Step 4 Run the page


      在页面上双击左键,并且在Browser选择View.在browser中的textbox输入你的名字,点OKbutton.在页面上的script应该产生一个适当的Hello  问候语。


    实质在运行时,C#代码被编译器逆向设置引用的assemblies和导入namespaces,并对与你的类相应的JavaScript会被产生。还有就是Scriptlet控件还产生一些JavaScript被用来加载与script相应的你所引用的assemblies,并且你的代码是在最开始已经一次加载。


    如果你是对代码感觉到奇怪,你能用你的浏览器查看源代码。这儿产生的script如下:



     


    ExpandedBlockStart.gifContractedBlock.gifwindow.main = function main() { Type.createNamespace('Scriptlet'); //// // Scriptlet.MyScriptlet 
    InBlock.gif

    InBlock.gifScriptlet.MyScriptlet 
    = function Scriptlet_MyScriptlet(arguments)
    ExpandedSubBlockStart.gifContractedSubBlock.gif 

    InBlock.gif
    this._clickHandler = Delegate.create(thisthis._onOKButtonClick);
    InBlock.gif 
    var okButton = $('okButton');
    InBlock.gif okButton.attachEvent('onclick', 
    this._clickHandler);
    ExpandedSubBlockEnd.gif }
     
    InBlock.gif
    InBlock.gifScriptlet.MyScriptlet.main 
    = function Scriptlet_MyScriptlet$main(arguments)
    ExpandedSubBlockStart.gifContractedSubBlock.gif 

    InBlock.gif
    var scriptlet = new Scriptlet.MyScriptlet(arguments);
    ExpandedSubBlockEnd.gif }
     
    InBlock.gif
    ExpandedSubBlockStart.gifContractedSubBlock.gifScriptlet.MyScriptlet.prototype 
    = {
    InBlock.gif _clickHandler: 
    null, dispose: function Scriptlet_MyScriptlet$dispose()
    ExpandedSubBlockStart.gifContractedSubBlock.gif 
    {
    InBlock.gif 
    if (this._clickHandler)
    ExpandedSubBlockStart.gifContractedSubBlock.gif 
    var okButton = $('okButton'); 
    InBlock.gifokButton.detachEvent('onclick', 
    this._clickHandler);
    InBlock.gif 
    this._clickHandler = null;
    ExpandedSubBlockEnd.gif }

    ExpandedSubBlockEnd.gif }
    ,
    InBlock.gif _onOKButtonClick: 
    function Scriptlet_MyScriptlet$_onOKButtonClick() 
    ExpandedSubBlockStart.gifContractedSubBlock.gif
    {
    InBlock.gif 
    var nameTextBox = $('nameTextBox');
    InBlock.gif 
    var greetingLabel = $('greetingLabel');
    InBlock.gif greetingLabel.innerHTML 
    = 'Hello ' + nameTextBox.value + '!';
    ExpandedSubBlockEnd.gif }
     
    ExpandedSubBlockEnd.gif}

    InBlock.gifScriptlet.MyScriptlet.createClass('Scriptlet.MyScriptlet', 
    null, IDisposable); 
    InBlock.gifScriptFX.Application.Current.run(Scriptlet.MyScriptlet); 
    ExpandedBlockEnd.gif}

    None.gifScriptHost.initialize([ 'App_Scripts
    /ssfx.Core.js' ]); 

    你注意,这里产生的script代码看上去与C#代码相似,这个是有意图的。
    Scriptlet控件允许你改变代码产生设置为产生发布模式(mode)的代码,scirpt的大小被缩为最小。
    Scriptlet控件还支持预编译的C#代码。


    最后,你能使用Scriplet模型没需要使用Scriptlet server control或者ASP.NET预编译的C#代码,并且使用一些样板文件模版,来模仿Scriplet Server control一步步的产生代码。


    Step 5:Debugging the code


    确定在你的Scriptlet control 的Enablede bugging设置为true。这个确包产生代码可以调试,并且script引用包括debug 版本。产生debug Script代码看上去几乎如同C#代码,并且包括所有的程序都能识别,方法名等。


    被保存后。即使你以后不用这一步设置代码的debug,仍然允许你使用debugging。


    debugging in Internet Explorer


    打开Visual Studio。运行浏览器,你能选择使用什么浏览器调试,使用Tools | Attach to Process menu(iexplorer.exe ),当你选择了浏览器后,还挑选debugging为Script类型,(instead of Native or Managed )。


    在Visual Studio打开Script Explorer 工具窗口,在Debug|Windows menu.这显示所有执行的Script,你能打开任何Script文件和place Breakpoints.


    为在Default.aspx页面上做一个实验, 在Scriptlet_MyScriptlet$_onOKButtonClick函数上添加place the breakpoint。

    这个是Button上的事件。


    现在Click Button.breakpoint应该会hit,并且你现在能debugger,还能在窗口中看到检测到的变量。


    r_Step7.jpg
    注意:你需要确保IE允许debugging.他不能是默认的。打开在Tools | Options menu 下Internet Options diglog接着 打开高级tab。进行如下设置:


    - Disable script debugging (Internet Explorer): Unchecked


    - Disable script debugging (Other): Unchecked


    - Display a notification about every script error: Checked



     Debugging in Firefox


    你先要得到一个Firebug extension安装在你的Firefox,允许你Firefox浏览器script debugger。
     r_FoxDebug.jpg
     
    -------------------------------------------------------------


    好拉现在一个hollo World就OK拉。。接下拉就 做一个AJAX的Hello World页。


    Step 6: Implementing an Ajaxian Hello World pager_Step8.jpg

     


    Scirpt#的主要目的是允许你开发一个AJAX应用程序。包括重要的Client-side代码统计。还有他们包括应用程序logic使用XMLHttp制造一个HTTP请求服务端。


    首先我们将添加一个Web handler(.ashx file)将用来确定请求Client,在Server端创建一个问候语言,和发送结果到Client端。在solution explorer中的Web site right click选择添加New Item,并选取Generic Handler 项目并名为Greeting.ashx 。


    里面的代码如下:


     


    None.gif<%@ WebHandler Language="C#" Class="Greeting" %> 
    None.gif
    using System; 
    None.gif
    using System.Web; 
    None.gif
    public class Greeting : IHttpHandler 
    ExpandedBlockStart.gifContractedBlock.gif

    InBlock.gif
    public void ProcessRequest(HttpContext context) 
    ExpandedSubBlockStart.gifContractedSubBlock.gif

    InBlock.gif
    string name = context.Request.QueryString["name"];
    InBlock.gifcontext.Response.ContentType 
    = "text/plain"; context.Response.Write("Hello " + name + "! The current time on the server is " + DateTime.Now); 
    ExpandedSubBlockEnd.gif}
     
    InBlock.gif
    public bool IsReusable
    ExpandedSubBlockStart.gifContractedSubBlock.gif 

    ExpandedSubBlockStart.gifContractedSubBlock.gif
    get {
    InBlock.gifhttp:
    //projects.nikhilk.net Version 0.4.4.0
    InBlock.gif
    Script# 101 16
    ExpandedSubBlockEnd.gif
    return false; }

    ExpandedSubBlockEnd.gif }
     
    ExpandedBlockEnd.gif}


    现在有一个HTTP service我们能调用Client端。请求这个服务的方式是Greeting.ashx?name=。


    现在我们需要写一些代码使用XMLHttp产生一些调用,在当OK Button被点下时来使用这个XMLHTTP产生的调用来取代在Client的问候文本。


    回到design view and edit the C# code


    比硬编码(hard-coding)更好的是URL格式里面的代码,让它通过带一个Argument进入Scriptlet.这将引入Scriptlet control的特性Arguments,并且在C#代码中相应的ScriptletArguments类型。


    打开代码编辑窗口,Click在工具箱中的Arguments Button。这将带一个Argument collection 编辑器,在这里你能添加一个字符串是字面上的argument的名字,名叫urlFormat包括被使用的请求URL的格式。


    r_Step71.jpg
    当Scriptlet被保存时,argument被添加后如下:




    None.gif<ssfx:Scriptlet runat="server" ID="scriptlet"> <Arguments> 
    None.gif
    <ssfx:StringLiteral Name="urlFormat" Value="Greeting.ashx?name={0}">
    None.gif
    ssfx:StringLiteral> Arguments>
    None.gifdot.gif 
    ssfx:Scriptlet>

    这个argument就像一个ScriptletArguments 的成员实例通过你的Scriptlet.实际上,ScriptletArguments 类是动态产生的类,所以还在代码编辑窗口中的intellisense(智能感知)中发现多一个urlFormat这个arguments 实例的成员,如下:


    r_Step73.jpg
    代码显示粗体部分需要被添加到MyScriptlet 类。


     


    None.gifpublic class MyScriptlet : IDisposable
    ExpandedBlockStart.gifContractedBlock.gif 

    InBlock.gifdot.gif 
    private string _urlFormat; 
    InBlock.gif
    private XMLHttpRequest _request; 
    InBlock.gif
    private MyScriptlet(ScriptletArguments arguments) 
    ExpandedSubBlockStart.gifContractedSubBlock.gif
    { _urlFormat = arguments.urlFormat; dot.gif } 
    InBlock.gif
    InBlock.gif
    public void Dispose() 
    ExpandedSubBlockStart.gifContractedSubBlock.gif
    dot.gif if (_request != null)
    ExpandedSubBlockStart.gifContractedSubBlock.gif 
    { _request.Onreadystatechange = (Callback)Delegate.Null; _request.Abort(); _request = null; }
    ExpandedSubBlockEnd.gif }
     
    InBlock.gif
    InBlock.gif
    private void OnOKButtonClick() 
    ExpandedSubBlockStart.gifContractedSubBlock.gif
    { InputElement nameTextBox = (InputElement)Document.GetElementById("nameTextBox");
    InBlock.gif _request 
    = new XMLHttpRequest();
    InBlock.gif _request.Onreadystatechange 
    = this.OnRequestComplete;
    ExpandedSubBlockStart.gifContractedSubBlock.gif _request.Open(
    "GET", String.Format(_urlFormat, nameTextBox.Value.Escape()), /* async */ true); _request.Send(null);
    ExpandedSubBlockEnd.gif }

    InBlock.gif
    InBlock.gif 
    private void OnRequestComplete()
    ExpandedSubBlockStart.gifContractedSubBlock.gif 

    InBlock.gif
    if (_request.ReadyState == 4
    ExpandedSubBlockStart.gifContractedSubBlock.gif

    InBlock.gif_request.Onreadystatechange 
    = (Callback)Delegate.Null; DOMElement greetingLabel = Document.GetElementById("greetingLabel");
    InBlock.gif
    InBlock.gif greetingLabel.InnerHTML 
    = _request.ResponseText; _request = null;
    ExpandedSubBlockEnd.gif }
     
    ExpandedSubBlockEnd.gif}
     
    InBlock.gif
    ExpandedBlockEnd.gifdot.gif }
     



    Script# framework 提供高级HTTPRequest 类简化网络编程。在这里只使用XMLHttp很少的概念。此外,Script# framework提供各种不同的其他APIs和Objects,更好的增加一个script开发者的生产力,并且允许你创建丰富的Web 应用程序。  
     
    ---------------------------------------------------------
    building a Script Component in a Script# Class Library
    ----------------------------------------------------------


    我们将构建一个ClockLabel可以重用的component,它能用来在Label元素中显示当前时间.


    Step1:Add a Script# Class Library project


    一个Class Library project允许你构建一个可重用的Component.它产生一个.NET assembly(.dll file)和结核doc-comments (.xml file) 能在并发(多个Class library projects同时引用)Class library projects被引用或被Scriptlets.它还产生debug和release scirpt文件(.js file),它里面是包括着Web site和发送到下载到浏览器.


    添加一个工程名字叫"Clock"的solution,并选择工程类型为Script# Class Library.


    r_ScriptClasslib1.jpg

    step2:Implement the ClockBehavior component


    我们将事项洋类被叫做ClockBeharvior,它的路径是ScriptFX.UI.Behavior类.这个行为提供用户自主(author)和密封Script功能的机制,能被绑在HTML元素里.


    CloclBeHavior是设计去绑在



    None.gif// ClockBehavior.cs // 
    None.gif
    using System; using System.DHTML;
    None.gif 
    using ScriptFX; using ScriptFX.UI;
    None.gif 
    namespace Clock
    ExpandedBlockStart.gifContractedBlock.gif 
    public class ClockBehavior : Behavior
    ExpandedSubBlockStart.gifContractedSubBlock.gif 
    {
    InBlock.gif 
    private int _intervalCookie; 
    InBlock.gif
    public ClockBehavior(DOMElement domElement, string id) : base(domElement, id)
    ExpandedSubBlockStart.gifContractedSubBlock.gif 
    { _intervalCookie = Window.SetInterval(OnTimer, 1000);
    ExpandedSubBlockEnd.gif }
     
    InBlock.gif
    public override void Dispose() 
    ExpandedSubBlockStart.gifContractedSubBlock.gif
    {
    InBlock.gif 
    if (_intervalCookie != 0)
    ExpandedSubBlockStart.gifContractedSubBlock.gif 
    {
    InBlock.gif Window.ClearInterval(_intervalCookie);
    ExpandedSubBlockEnd.gif }
     
    InBlock.gif
    base.Dispose();
    ExpandedSubBlockEnd.gif }
     
    InBlock.gif
    InBlock.gif
    private void OnTimer()
    ExpandedSubBlockStart.gifContractedSubBlock.gif 
    {
    InBlock.gif DateTime dateTime 
    = new DateTime();
    InBlock.gif DOMElement.InnerHTML 
    = dateTime.Format("T");
    ExpandedSubBlockEnd.gif }

    ExpandedSubBlockEnd.gif }

    ExpandedBlockEnd.gif }
     


    Step3:Build the project


    构建工程,编译你的代码,并且没有显示任何错误.你的工程运行成功,在C#和Script#编译器上产生.Net assembly和相应的Script文件.


    如果你关于产生的代码感觉奇怪,你选择你的工程显示所有文件,你就能看到"bin"文件夹里面你应该去看Clocl.dll,Clock.xml, Clock.js 和 Clock.debug.js.


    打开Clock.debug.js里面的内容如 下:





    ExpandedBlockStart.gifContractedBlock.gifType.createNamespace('Clock');
     
    //// // Clock.ClockBehavior 

    Clock.ClockBehavior = function Clock_ClockBehavior(domElement, id) { Clock.ClockBehavior.constructBase(this, [ domElement, id ]);

    None.gif this._intervalCookie$1 = window.setInterval(Delegate.create(thisthis._onTimer$1), 1000); 
    None.gif}
    ExpandedBlockStart.gifContractedBlock.gif Clock.ClockBehavior.prototype 
    = {
    InBlock.gif _intervalCookie$
    10, dispose:function Clock_ClockBehavior$dispose() 
    ExpandedSubBlockStart.gifContractedSubBlock.gif

    InBlock.gif
    if (this._intervalCookie$1
    ExpandedSubBlockStart.gifContractedSubBlock.gif
    { window.clearInterval(this._intervalCookie$1); }
    InBlock.gif Clock.ClockBehavior.callBase(
    this'dispose');
    ExpandedSubBlockEnd.gif }
    , _onTimer$1:function Clock_ClockBehavior$_onTimer$1()
    ExpandedSubBlockStart.gifContractedSubBlock.gif 

    InBlock.gif var dateTime 
    = new Date();
    InBlock.gif 
    this.get_domElement().innerHTML = dateTime.format('T');
    ExpandedSubBlockEnd.gif }

    ExpandedBlockEnd.gif }

    None.gif Clock.ClockBehavior.createClass(
    'Clock.ClockBehavior', ScriptFX.UI.Behavior); 

    这个产生的Scirpt看上去很像C#代码,并构建在debugging 案例下.


    Clock.js包括一个相同Script的发布版,在whitespace已经除去任何评论.此外private和internal成员已经缩小到最小的文件大小.



    ExpandedBlockStart.gifContractedBlock.gifType.createNamespace('Clock');
    Clock.ClockBehavior
    =function(domElement,id){Clock.ClockBehavior.constructBase(this,[domElement,id]);
    this.$1_0=window.setInterval(Delegate.create(this,this.$1_1),1000);}
     Clock.ClockBehavior.prototype={$1_0:0,dispose:function(){if(this.$1_0){window.clearInterval(this.$1_0);}
    Clock.ClockBehavior.callBase(this'dispose');}
    ,$1_1:function(){var $0=new Date();
    this.get_domElement().innerHTML=$0.format('T');}
    }
     Clock.ClockBehavior.createClass('Clock.ClockBehavior',ScriptFX.UI.Behavior);


    Step4:Reference the project and consume the component


    为运行这个类后你已经是它的作者了,你需要包括它在页面中,并且与页面上的label 元素相关联.


    打开Default.aspx上添加一个id="clockLabel"的


    下一步需要添加引用assembly,并添加一个代码实现ClockBehavior类的实例.



    None.gif<label id="clockLabel">label>


    选择design view,并选择Scriptlet 控件,选择Scriptlet控件的面版上的Edit References,如下:


    r_ScriptClasslib2.jpg
    为引用Clock assembly,我们首先需要引用Web site. 之后Click Import并选择Clock.dll文件,它是在Clock project的Debug 文件夹中的.导入,拷贝Clock.dll和Clock.xml文件进入Web site的bin/scirpt文件夹.还拷贝Clock.debug.js and Clock.js script文件进入 Web site的 App_Scripts文件夹.导入完成后.点Add添加一个assembly,之后就OK,保存.


    最后写一些代码来使用ClockBechavior类,在Scriptlet中选择 Edit Code ,添加下面粗体代码.


    Step 5:Run the page


    现在你选择View 在Browser中运行页面,当Browser加载页面的时,在页面上会加载Clock.js,和你的Scriplet代码中ClockBehavior的实例.


    被你创作的ClockBehavior代码,现在将在你的Label元素总显示当前时间.






    Summary





    这个walkthrouth提供一个非常基础的Sicpt# Overview.并且使用它实现在应用程序中Sciptlet的code-behind代码,还有重用Components.它还显示怎样你使用C#去实现client-side logic,不需要写任何的Script,因此还可以利用IDE的intellisense 和编译时检测.你能使用Class Browser特性,在Visual Studio浏览Script# assemblies也可以自定义Script Components(你是作者),引导你探索Framework新特性,并超越,立即找到Scipt 代码.


    There is a lot more you can do with Script# as well as additional options, and framework components and building blocks to use. Hopefully this walkthrough provided enough context and a general idea of starting your development with Script#!


     






    我翻译大概25页,源程序在安装后的目录里面有一个Simple,里面有。Script#对VS2005有很好的支持,就是和原来使用Altas一样的使用方式,引用控件也与原来一样,但还不支持VS2008,我使用的VS2008,一:是引用它的framework和library到工程里面,还有就安装后里面有一个simple,你把里面的工程拿来运行,运行后在这个工程里面添加新的.aspx文件来练习,我暂时也只想到这样的方法拉.还有在http://www.cnblogs.com/shunzimm/archive/2007/10/28/940190.html有个方法。但我有没有搞清楚是怎样安装的。
    如果谁还有其他的方法,就和大家分享吧.
     

    本文转自
    http://www.cnblogs.com/worksguo/archive/2007/12/13/993995.html

    展开全文
  • script标签到底该放在哪里

    万次阅读 多人点赞 2015-10-20 22:30:42
    script标签在HTML文档中的位置.
  • 标签按照它们出现的顺序被执行,不管是script代码块还是script外链,都遵循先出现先执行的原则。这意味着如果你的网站有很慢的脚本在页面较前部分被加载,你的网页加载就会被显著拖慢。这也意味着后加载的脚本可以...
  • script标签

    2017-12-08 11:06:58
    先来试个一句话解释仨,当浏览器碰到 script 脚本的时候:没有 defer 或 async,浏览器会立即加载并执行指定的脚本,“立即”指的是在渲染该 script 标签之下的文档元素之前,也就是说不等待后续载入的文档元素,读...
  • script的加载和执行

    2020-01-05 16:22:11
    script的加载和执行 脚本的位置 JavaScript代码的下载和执行是阻塞其他文件的下载的 如果把script标签放到head中,那么,假设需要加载三个js文件和一个css文件,那么运行图就是, 如果把script标签放到前面:我们...
  • JavaScript <script

    2020-10-01 14:56:20
    JavaScript script 元素 script元素 script 元素有 8 个属性: async: 可选。表示应该立即执行下载脚本,当不能阻止其他页面动作,比如下载资源或者等待其他脚本加载。只对外部脚本有效。 charset:可选。使用 ...
  • jsonp详解

    2018-11-29 21:31:18
    说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以通过服务器端代理...
  • [问题记录]报错:npm ERR! missing script: serve

    万次阅读 热门讨论 2020-05-21 23:17:57
    报错:npm ERR! missing script: serve。
  • npm run dev 报错:missing script:dev

    万次阅读 2018-07-31 18:39:26
    报错信息: 解决方法: package.json 里面没有 “scripts”: {“dev”: “xxx”} 这段了。
  • SCRIPT5009: “$”未定义

    万次阅读 2015-04-25 22:30:01
    /js/jquery/jquery-1.11.1.min.js">
  • unity提示can't add script解决办法

    万次阅读 2017-07-04 08:40:07
    unity提示can't add script解决办法: 1.脚本有误没有继承unity类。 2.类名文件名不一致。 3.内部逻辑代码有误。
  • 尝试将 SCRIPT script 作为函数执行

    万次阅读 多人点赞 2020-03-23 23:12:59
    用matlab处理音频文件时候在命令行弹出提示,尝试将 SCRIPT script 作为函数执行 是因为编写的文件名和执行函数重名了。 例如我这里的sound.m和函数sound(y,fs)重名了,所以出错失败了 把文件名字换成其他的...
  • 最有可能的是脚本文件名与脚本中定义的类名不一致 或者脚本中的类没有继承自MonoBehaviour
  • 动态创建script标签

    万次阅读 2017-08-15 17:10:02
    var script = $(''); //创建script标签 $('body').append(script); //将标签插入body尾部 var head = document.getElementsByTagName('head')[0];var script = document.createElement('script');script.type =...
  • 尝试将 SCRIPT XXX 作为函数执行

    万次阅读 2018-08-19 16:03:29
    尝试将 SCRIPT XXX 作为函数执行 MATLAB 执行时报错! 解决: 更改源文件名 .m 即可;
  • missing script: start“错误 出现这个错误的常见原因是 在package.json中没有配置start 在通过truffle创建项目时,可以通过  1. truffle unbox webpack 通过这种方式创建的项目package.json的结构如下所示 ...
  • Script Error 的产生原因和解决方法

    万次阅读 2019-07-15 14:29:22
    转自:https://www.alibabacloud.com/help/zh/faq-detail/88579.htm
1 2 3 4 5 ... 20
收藏数 1,759,637
精华内容 703,854
关键字:

script