使用 IntraWeb (9) - JavaScript

IW 依赖 js 构建(我数了数, 在当前版本它的资源文件默认携带了 26 个 js);


但 IW 尽可能地让用户少用或不用 js, 但如果你对 js 也不陌生, IW 提供了多种途径与方便.
我给它分两大类:

1、直接写入 js 代码(站点级、页面级, 还可以精确地指定插入位置);

2、链接 *.js 文件(外链、内链,
还可以是资源文件).




首先应该说明: IW 已经霸占了 window.onload, 用户在 js 中不能再使用 onload. 如果你有一个 js 文件或模板没有如期运作,
或许是这个原因; 不过好像仅此一个, 剩下的都是方便了.

还有: 在 IW 中可以直接使用 jQuery, 当前版本携带的是: jQuery
1.8.2



1.1 - 使用窗体的 AddToInitProc 插入初始化的 js 代码


procedure TIWForm1.IWAppFormCreate(Sender: TObject);
begin
  AddToInitProc(‘alert("欢迎")‘);  //其中的 js 代码最终会被 window.onload 调用
end;




1.2 - 在控件的 ScriptEvents 属性中添加 js 代码


procedure TIWForm1.IWAppFormCreate(Sender: TObject);
begin
  IWButton1.ScriptEvents.Values[‘onclick‘] := ‘alert(this.name)‘;  //这里的代码都应该很简单, 主要是函数调用
end;

{这在设计时更方便:}






1.3 - 可以把 js 函数写在窗体的 JavaScripts 属性中


//如果不是使用 js 文件, 就应该把 js 函数都写在 JavaScripts 属性中
procedure TIWForm1.IWAppFormCreate(Sender: TObject);
begin
  JavaScript.Text := ‘function MyFun1() {alert("TIWForm1.JavaScripts");}‘;
  IWButton1.ScriptEvents.Values[‘onclick‘] := ‘MyFun1()‘;
end;

{建议在设计时使用 JavaScripts 属性}





1.4 - 只执行一次的 js 代码:


procedure TIWForm1.IWAppFormCreate(Sender: TObject);
begin
  JavaScriptOnce := ‘alert("JavaScriptOnce")‘;
end;




1.5 - 如果要进行精确的定位插入, 需要用到窗体的 PageContext 属性


//PageContext 对象提供了更多插入方法, 下面几个只是我找到执行顺序的(下面次序就是我测试出的执行顺序)
PageContext.JavaScript;
PageContext.AddToJavaScriptOnce();
PageContext.AddToOnReady();
PageContext.AddToInitProc();
PageContext.AddToIWCLInitProc();
PageContext.AddToInitProcPageUnlockCode();
PageContext.AddToInitProcFocusCode();
PageContext.AddToInitProcNewWindowCode();
PageContext.AddToInitProcDoLastCode();




2.1 - 直接 Html 的 <Head></Head> 插入链接或代码


{在 TIWServerController 的 onCreate 事件中插入全站级的 js 链接}
procedure TIWServerController.IWServerControllerBaseCreate(Sender: TObject);
begin
  HTMLHeaders.Add(‘<script type="text/javascript" src="/My1.js"></script>‘);  //内链, 文件位于 wwwroot
  HTMLHeaders.Add(‘<script type="text/javascript" src="Http://.../My2.js"></script>‘); //外链, 全路径
end;
//注: wwwroot 是 IW 的默认根目录, js、css 和图片等等都应该放在其中; 可通过 IWServerController.ContentPath 读取其实际路径

{在窗体的 OnCreate 事件中插入页面级的 js 链接}
procedure TIWForm1.IWAppFormCreate(Sender: TObject);
begin
  PreHeader.Add(‘<script type="text/javascript" src="/My3.js"></script>‘);  //这个在前; 但在 IWServerController.HTMLHeaders 之后
  ExtraHeader.Add(‘<script type="text/javascript" src="/My4.js"></script>‘); //这个在后
end;
//注: 上面两个操作都可以在设计时.

//其实如果在 Head 中链接 js 或 css 应该使用 ContentFiles, 上面的嵌入方法跟适于...譬如:
procedure TIWServerController.IWServerControllerBaseCreate(Sender: TObject);
begin
  HTMLHeaders.Add(‘<meta name="Keywords" content="万一,Delphi,IntraWeb"/>‘);  //指定搜索关键字
end;





2.2 - 使用 ContentFiles 方法链接 js 或 css


{站点级 - ServerController.pas}
procedure TIWServerController.IWServerControllerBaseCreate(Sender: TObject);
begin
  ContentFiles.Add(‘My1.js‘); //内链, 文件位于 wwwroot; 当然也可以外链
end;

{页面级 - Unit1.pas}
procedure TIWForm1.IWAppFormCreate(Sender: TObject);
begin
  ContentFiles.Add(‘My2.js‘);      //内链, 文件位于 wwwroot; 当然也可以外链
  ContentFiles.Add(‘MyJs/My3.js‘); //内链 wwwroot/MyJs/My3.js
end;

//ContentFiles 会自动转换为 Html 需要的格式, 所以很方便





2.3 - 使用 PageContext 的方法


procedure TIWForm1.IWAppFormCreate(Sender: TObject);
begin
  PageContext.PreScriptFiles.Add(‘My4.js‘);
  PageContext.AddScriptFile(‘My5.js‘);
end;




2.4 -


//未完待续




2.5 -






使用
IntraWeb (9) - JavaScript,布布扣,bubuko.com

使用
IntraWeb (9) - JavaScript

时间: 2024-10-13 10:20:25

使用 IntraWeb (9) - JavaScript的相关文章

IntraWeb在异步事件中返回javascript 脚本

unit Unit1; interface {$DEFINE CODESITE} uses {$IFDEF CODESITE}CodeSiteLogging, {$ENDIF} Classes, SysUtils, IWAppForm, IWApplication, IWColor, IWTypes, IWCompButton, Vcl.Controls, IWVCLBaseControl, IWBaseControl, IWBaseHTMLControl, IWControl, IWCompM

使用 IntraWeb (38) - TIWAppForm、TIWForm、TIWBaseHTMLForm、TIWBaseForm

窗体 TIWAppForm 所在单元及继承链: IWAppForm.TIWAppForm 主要成员: property OnURLRequest: TOnURLRequest //响应下面的 DoURLRequest 方法 procedure DoURLRequest(aRequest: THttpRequest) //执行 OnURLRequest 事件; 如: DoURLRequest(WebApplication.Request); function MessageForm: TIWMes

Delphi XE7 开发ActiveX 及在IntraWeb下调试

最近学习DelphiXE7下Intraweb开发,Intraweb完全服务器端运行使得FastReport报表系统无法在客户端运行,当然网上也有一大堆解决方案,例如导出到PDF后,给出连接,让客户点击下载等,个人感觉不完美.由于我做的B/S系统主要运行在windows平台,所以还是考虑ActiveX插件,来的直观.一.DelphiXE7下 ActiveX开发 1.new-other-打开窗口,选择ActiveX Library,点击OK按钮 2.出现这样一个界面,此时Delphi建立一个无窗口的

使用 IntraWeb (21) - 基本控件之 TIWTabControl

TIWTabControl 包含的是 TIWTabPage; 设计时通过右键菜单 Add Page 添加(再给页面添加东西时一定要先选定页面); 下面例子是动态添加的. TIWTabControl 所在单元及继承链: IWCompTabControl.TIWTabControl 主要成员: property Pages: TList //TIWTabPage 对象的集合; 但它是 TList 类型, 使用前需转换下 property ActiveTabFont: TIWFont //当前 Tab

使用 IntraWeb (10) - CSS

IW 会把大多数的视觉属性转换为 CSS; 我们主动使用 CSS 要分两步: 第一步: {通过窗体的 StyleSheet 属性指定要链接的 CSS 文件} procedure TIWForm1.IWAppFormCreate(Sender: TObject); begin   StyleSheet.Filename := 'MyCss1.css'; //CSS 文件须放在 wwwroot 下 //  StyleSheet.URL := 'http://...';    //外链 end; {假

Javascript中call的使用

call 方法应用于:Function 对象调用一个对象的一个方法,以另一个对象替换当前对象.call([thisObj[,arg1[, arg2[,   [,.argN]]]]])参数:thisObj 可选项.将被用作当前对象的对象. arg1, arg2, , argN 可选项.将被传递方法参数序列. 说明:call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象.如果没有提供 thisObj 参数,那么 G

你不知道的javascript 之 &gt;&gt;

?远大于符号 在数学公式中,">>"代表远大于符号,表示一个数远大于另一个数,如76>>3,-2>>-99等.庞加莱与波莱尔1901年首先使用了它,很快被数学界所接受,沿用至今. 折叠编辑本段右移运算符 在许多计算机编程语言(例如:C语言.C++语言.Java语言.JavaScript语言.Pascal语言等)中,">>"代表右移运算符,就相当于"shr".该运算符为双目运算符,结合方向为从左到右,

初识JavaScript

JavaScript简介 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能.因为JavaScript兼容于ECMA标准,因此也称为ECMAScript. ECMAScript,描述了该语javascript组成言的语法和基本对象. 文档对象模型(DOM),描述处理网页内容的方法

最全解析如何正确学习JavaScript指南,必看!

划重点 鉴于时不时,有同学私信问我:怎么学前端的问题.这里统一回复一下,如下次再遇到问我此问题同学,就直接把本文链接地址发给你了. "前端怎么学"应该因人而异,别人的方法未必适合自己.就说说我的学习方法吧:我把大部分时间放在学习js上了.因为这个js的学习曲线,先平后陡.项目实践和练习啥的,我不说了,主要说下工作之外的时间利用问题.我是怎么学的呢,看书,分析源码.个人这几天统计了一下,前端书籍目前看了50多本吧,大部分都是js的.市面上的书基本,差不多都看过. 第一个问题:看书有啥好处