title: Sciter View Object
tags: sciter
视图对象
表示运行当前脚本的窗口。
view – 当前视图对象(运行脚本的视图对象)可以通过全局 view 变量访问。
WINDOW_MINIMIZED 最小化
WINDOW_MAXIMIZED 最大化
WINDOW_HIDDEN 隐藏
WINDOW_SHOWN 显示
WINDOW_FULL_SCREEN 全屏
: view.state 属性值
属性
root
: r – Element, 加载到视图中的文档的根元素。
windowState
: r/w – 窗口状态。仅适用于顶级窗口。接受的值: View.WINDOW_MINIMIZED,
View.WINDOW_MAXIMIZED
, View.WINDOW_HIDDEN
, View.WINDOW_SHOWN
or View.WINDOW_FULL_SCREEN
.
focus
: r/w – Element, 当前获得输入焦点的元素。设置其他元素获取焦点使用 view.focus = el
;
eventsRoot
: r/w – Element,“事件根”元素。用于实现“模态文档循环”。如果设置,则所有针对不是元素后代的元素的UI事件将被重新路由到元素。设置此元素可能会导致更改当前焦点元素。这是典型的模态文档循环:
tiscript view.eventsRoot = dlg; while (dlg.isVisible) view.doEvent(); dlg.style#display = "none"; view.eventsRoot = null;
screen
: r – integer,当前窗口所在的屏幕编号。
screens
: r – integer, 系统中的屏幕(显示器)数量。
windowCaption
: r/w – string,窗口标题。
windowAspectRatio
: r/w – float | null,当前窗口客户端宽高比(aspect area of client area of this window)。
windowResizable
: r/w – boolean,如果用户可以调整窗口大小,则为 true 。
windowMinimizable
: r/w – boolean, 如果窗口有最小化按钮,则为 true - 用户可以最小化。
windowMaximizable
: r/w – boolean, 如果窗口有最大化按钮,则为 true - 可以由用户最大化。
windowTopmost
: r/w – boolean, 如果窗口位于最顶层,则为 true。
windowMinSize
: r/w – (x:integer,y:integer),窗口最小尺寸约束。用户不能使窗口小于该尺寸。
例如: view.minSize = (160,100);
windowMaxSize
: r/w – (x:integer,y:integer), 窗口最大尺寸约束。用户不能使窗口大于该尺寸。
例如:view.maxSize = (1600,1000);
windowIcon
: r/w – 窗口图标,该属性接受 null
– 设置默认图标,"url"
– string,窗口图标URL或Image
实例。
windowBlurbehind
: r/w – 窗口模糊效果,属性值:#auto
| #ultra-dark
| #dark
| #light
| #ultra-light
| #none
。如果设置该属性,则窗口是半透明的。根文档(root document)必须使用html { background:transparent; }
才能看到窗口后面的桌面。
方法
this
: (非功能)
load
: (url:string[, now: bool]) : true/false
该方法从指定的 url 载入一个文档到当前的视图(替换当前的文档)。如果 now 是 true 则同步加载文档 – 方法在文档下载并加载到视图后返回。
load
: (stream:Stream ) : true/false
该方法从指定的内存 流 中加载一个文档到前的视图(替换当前文档)。
box
: ( part [, edge [, relativeTo ]] ) returns: integer, 设备像素
返回 view 边缘坐标,参数:
-
part – 符号常量 #left, #top, #right, #bottom, #width 或 #height。定义要返回框(矩形)的一部分。另外 #part 可以接受以下常量:
- #rect – (x1,y1,x2,y2)
- #rectw –(x,y,width,height), 默认
- #position – (x,y)
- #dimension – (width,height)
-
edge:
- #border – 边框边缘 – 操作系统窗口边界
- #client – 客户端边缘
-
relativeTo:
- #screen – 返回相对于屏幕原点的坐标
- #self, 默认值 – 所有坐标都相对于视图的客户端区域的原点
screenBox
: ( [screenNo: integer,]area [, part ] ) returns: integer,设备像素
Returns screen(monitor) projection on cumulative desktop space. 参数:
area – 符号常量 #frame – 显示器屏幕尺寸, #workarea – 显示器工作区(除去任务/菜单栏)。设备像素。
-
part
- #rect – (x1,y1,x2,y2) 默认
- #rectw – (x,y,width,height)
- #position – (x,y)
- #dimension – (width,height)
screenNo – integer,可选的。返回特定屏幕数据。如果省略则返回当前窗口数据。
move
: ( x:int, y:int [, clientCoordinates: true | false] ) :void
替换屏幕上的视图窗口(对话框frame)。此方法仅适用于独立Sciter。
如果 clientCoordinates 为 true ,则 x和y被解释为屏幕上客户区的预期位置。
move
: ( x:int, y:int, width:int, height:int [, clientCoordinates: true | false] ) :void
替换窗口并更改屏幕上视图(对话框或frame)的尺寸。此方法仅适用于独立Sciter。
如果clientCoordinates为true,则x,y,width和height被解释为屏幕上客户区域的所需位置/大小。
mediaVar
: (name:string [, valueToSet: any]) : value | undefined
返回或设置特定媒体变量的值。
mediaVars
: ([ newVars:object]) : Object | undefined
如果未提供 newVars 参数,则该方法返回视图使用的当前媒体变量集。
如果 newVars 是一个对象,那么该方法将从对象的属性更新视图的媒体变量。在这种情况下返回undefined。
selectFile
: ( #save | _#_open | #open-multiple, filter:string , ext: string [,initialPath:string[, dialogCaption:string]] ) : string | array(string) | null
该方法显示系统文件选择器模式对话框并返回所选文件的完整路径名,如果用户取消此对话框,则返回null。
* 第一个参数是 #save 或 #open 标识。如果设置 #save,那么对话框标题是另存为... 否则(#open)标题是打开...
* _filter_ 是一个字符串过滤器,它定义了允许的文件扩展名列表,由字符“|”分隔,格式为:“label1 | file.ext1 | label2 | file.ext1 | ..”其中 _label_ 是选项标签(出现在对话框的选择器中),file.ext是';'分隔的文件名模板列表。
* _ext_ 是一个字符串 - 如果用户输入filename而不使用扩展名,则使用默认文件扩展名。
* _initialPath_ – string,如果提供将打开带文件夹的对话框。
* _dialogCaption_ – string, 对话框标题。
下面的示例将弹出对话框来选择html文件,并在当前视图中加载文件:
```tiscript
var fn = view.selectFile(#open,
"HTML Files (*.htm,*.html)|*.HTM;*.HTML|All Files (*.*)|*.*" , "html" );
if (fn) view.load(fn);
```
selectFolder
: ( [ dialogCaption:string, [defaultFolder:string]] ) : string | null
该方法显示系统文件夹选择器模式对话框并返回所选文件夹的完整路径名,如果用户取消此对话框,则返回null。
* _dialogCaption_ – string, 对话框标题。
* _defaultFolder_ – string, 如果提供,则显示该文件夹的对话框。
请注意,不同平台的selectFolder可能与view.selectFolder使用的UI不同。
selectPrinter
: 待定
dialog
: ( url: string | stream: Stream [, parameters: any [, alignment: int = 5] ] ) : undefined | 值传递给对话框的 close 方法
显示由URL或在内存中的定义的文档生成的模态对话框。第二个参数如果给值,将被复制到view.parameters变量,该变量可用于对话框HTML中的脚本。
alignment – integer,1到9 – 对齐到屏幕,-1到-9 – 对齐到父窗口,对于值的含义,请参阅键盘上的NUMPAD(小键盘),例如:5表示对话框位于屏幕的正中心。
dialog
: ( creationParams:object ) :undefined | value passed to close method of the dialog.
使用单参数对象调用模态对话框。
creationParams 是一个对象,包含以下字段:
url – string,要加载到弹窗中的文档的url
html – string,要加载到弹窗中的html文本。 url 或 html必须提供一个
x,y, width, height – integers,弹窗尺寸,如果忽略则由给定文档的默认尺寸决定
client – true | false,如果为true则x,y, width, height是基于客户端区域计算,否则基于系统窗口计算
parameters – object,该对象将传递给新的弹窗的 view.parameters 对象
caption – string,,弹窗标题
alignment – integer,1到9,– 对齐到屏幕, -1到-9 – 对齐到父窗口
-
screen – integer,0 .. View.screens - 1,如果alignment是1..9,那么它确定窗口将显示在哪里,可选。
如果提供x,y和alignment,那么x,y为参考点,alignment为窗口相对于该点的相对位置。
msgbox
: ( type:symbol, text: string, [ title: string, [ buttons [, onLoad: function [, onClose: function ]]]] ) : undefined | symbol of the button pressed to close dialog.
* _type_ – symbol,以下值之一: **#alert**, **#information**, **#question** 或者 **#warning**
* _text_ – string, 纯文本或者html
* _title_ – string, 弹窗标题
* _buttons_ – button definition(s), either:
* 以下标识符之一:**#ok**,**#cancel**,**#abort**,**#ignore**,**#yes**,**#no** 或 **#close**
* 结构对象 { id:#somesymbol, text:"Some Text" }
* 上面的符号或对象数组
* _onClose_ – 方法签名 `function(root, id)` 返回 _true_|_false_ 。在尝试关闭对话框时,将调用此函数,_id_ – 按下按钮的id,_root_ – 对话框的HTML文档的根节点。如果对话框被关闭返回true
* _onLoad_ – 方法签名 `function(root)`。创建对话框窗口后将调用此函数。可用于需要进行初始化的场景。例如:给包含的html填充数据。
样例:
1. `view.msgbox(#information, "我很好!");` – 显示一个简单的消息对话框
2. `view.msgbox(#question, "生存还是毁灭?", "Huh?", [ {id:#yes, text:"生存"}, {id:#no, text:"毁灭"} ] );`
window
: ( params:object ) :View – 创建窗口的视图对象.
创建单独的窗口
_params_ 是一个对象,包含以下字段:
* _type_ – int,窗口类型:**View.FRAME_WINDOW**,**View.TOOL_WINDOW**,**View.POPUP_WINDOW**
* _url_ – string,要加载到窗口中的文档的url
* _html_ – string,要加载到窗口中的html文本。 _url_ 或 _html_必须提供一个
* _x,y, width, height_ – integers,窗口尺寸,如果忽略则由给定文档的默认尺寸决定
* _client_ – true | false,如果为true则x,y, width, height是基于客户端区域计算,否则基于系统窗口计算
* _state_ – integer,窗口初始状态:**View.WINDOW_SHOWN**,**View.WINDOW_HIDDEN**,**View.WINDOW_MINIMIZED**,**View.WINDOW_MAXIMIZED**,**View.WINDOW_FULL_SCREEN**
* _parameters_ – object,该对象将传递给新的窗口的 _view.parameters_ 对象
* _caption_ – string,窗口标题
* _alignment_ – integer,1到9,– 对齐到屏幕, -1到-9 – 对齐到父窗口
* _screen_ – integer,0 .. View.screens - 1,如果alignment是1..9,那么它确定窗口将显示在哪里,可选。
如果提供x,y和alignment,那么x,y为参考点,alignment为窗口相对于该点的相对位置。
若要在分离模式(即使它的所有者窗口折叠它也将保留在屏幕上)下打开窗口,请以`View`类而不是`view`实例的形式调用此方法::`View.window(...)`。
close
: ( [retval: any] ) : undefined
关闭当前视图(如果是对话窗口视图,则关闭对话框)。retval 是任意脚本对象 – return dialog() 方法的返回值。
doEvent
: ( [#wait | #nowait | #all] | #untilMouseUp ) : undefined
将控制权传递给操作系统。 在操作系统完成处理其事件队列中的下一个事件后,将返回控制权。 此方法用于实现模态文档循环。
例子:
* **#wait** – 等待UI消息队列中的下一个事件,默认行为。
* **#nowait** – 如果消息队列中存在任何事件,则处理它,如果没有任何消息则立即返回
* **#all** –执行消息队列中的所有待处理消息。如果没有任何消息,立即返回
* **#untilMouseUp** – “短路”,执行和分派消息,直到收到MOUSE_UP,用于拖动场景
update
: () : undefined
执行视图中的所有挂起更改,并呈现屏幕上更改的内容。该方法调用后,所有DOM元素的坐标都是有效的。
当您需要提交DOM上的所有更新时,请使用此方法。例如:
```tiscript
function retrieveDataFromDB(recordSet)
{
while(!recordSet.EOF())
{
grid.appendRow(recordSet.row);
if(++numRowsAdded > 10)
{
numRowsAdded = 0;
view.update();
}
}
}
```
clipboard
: (callback: function) : undefined
调用当前系统剪贴板中各种数据格式的回调函数。回调函数具有如下签名: `function (` _`dataType`_`: symbol ) {...}`,其中dataType是以下符号之一:
**#text**
: – 纯文本,字符串
**#html**
: – html文本,字符串
**#picture**
: – 位图,图片类型对象
**#url**
: – url或链接,如下结构对象:`{url: string , caption: string }`
**#json**
: – JSON数据,对象。返回 integer – 剪贴板序列号。剪贴板缓冲区的每次更改都会更改此数字
clipboard
: (#get, dataType: symbol) : string | object | Image;
根据dataType定义的格式从剪切板中获取数据。允许的值见之前的列表。
提示:**#html**格式函数返回两个值:源URL(如果有)和html数据本身。
两个都获取这样使用:`var (url, html) = view.clipboard(#get, #html);`
clipboard
: (#put, data: string | object | Image ) : undefined;
将数据存储到剪贴板。当数据是一个对象时,它应该具有以下结构,其中所有属性都是可选的,但必须有一个:
``` json
{
text: "some text",
html: "some html",
link: { caption: "some text", url: "file://some ..." },
file: [ "path1", "path2", ...],
json: someData
}
```
请注意,json格式剪切板是Sciter特有的。你可以使用它在Sciter程序之间传递数据。
你可以一次设置多个数据项(例如,文本和html)。目标应用程序将获取它在特定上下文中理解的格式。
focusable
: (#next | #prior | #first | #last, [from:Element]) : Element
该方法以TAB排序的方式返回 next/previous/first/last(下一个/上一个/第一个/最后一个)可获取焦点元素,从指定元素或当前焦点元素中获取。
performDrag
: ((element:Element | img: Image, xOffset: integer, yOffset: integer), data:Object, ddMode: #any | #copy | #move) : null | #copy | #move
执行系统拖放操作
_element_ 是用于拖动图像的DOM元素,或者你可以提供 _图像_ 和 x/y 偏移作为拖动图像。
_data_ 是一个包含以下属性的对象:
* `{text: String}` – 纯文本字符串
* `{html: String | Element}` – html,作为给定元素的字符串或外部HTML
* `{file: String | [String, String, ...]}` – 要拖入的单个文件或文件列表
* `{link: String | { caption: "some text", url: "file://some ..." }}` – 单独的url字符串或 标题/url对
* `{json: value}` – 任何将序列化为json字符串的值。 json可用于在Sciter窗口之间传递其他数据
_data_ 对象可能会包含多个属性,目标会选择最合适的。
_ddMode_ 定义了允许拖放的类型:
* **#copy** – 复制
* **#move** – 移动
* **#any** – 复制或移动
`performDrag()` 是一个阻塞操作 – 该方法等待拖放完成或失败时返回。
cursorLocation
: ( ) : (x:int, y: int)
返回相对于视图客户区的光标位置:
`var (x,y) = view.cursorLocation();`
on
: ( nameandns: string, handler: function ) : view
给 view (window) 的一个事件添加 _handler_ 。
_nameandns_ – string that contains one of [the event names](#event-names) at the bottom and optionally arbitrary namespace name in the form "name.namespace".
off
: ( eventname: string | handler: function ) : view
按名称或函数本身解绑事件处理程序。
eventname在这里是“name”,完整的“name.namepsace”或只是“.namepsace”。例:
```javascript
view.off(".mymodule");
```
将解绑下面代码绑定的事件:
```javascript
view.on("move.mymodule",foo)
.on("size.mymodule",foo);
```
request
: ( params: object) : undefined.
使用具有以下字段的params对象发送HTTP请求:
* **type** – _symbol_,**#get**,**#post**,**#put** 或者 **#delete**,默认: #get
* **url** – string,URL
* **protocol** – _symbol_,**#basic**,**#multipart**,**#json**
* **params** – _object_,HTTP请求参数
* **headers** – _object_,HTTP请求头
* **success** – _function(data,status)_,请求成功回调函数
* **error** – _function(err,status)_,请求失败回调函数
* **complete** – _function(data or err,status)_,请求完成回调函数(成功或失败均执行)
* **progress** – _function(bytesReceived, totalBytes)_,对接收到的每个数据块调用的回调函数。_bytesReceived_ 是一个整数 – 到目前为止接收的字节数,_totalBytes_ 是一个整数 – 服务器在HTTP的 content-length 字段中报告的总字节数。如果服务器不上报,则 _totalBytes_ 的值是 _undefined_。
* **toFile –** _string_,如果提供,应包含存储响应的文件路径。用于文件下载方案。
* **proxyHost**,**proxyPort** – _string_,_integer_。如果提供这两个参数,那么请求将通过该代理主机。
* **output** – symbol,**#string** | **#stream** | **#bytes** | **#json**。如果提供该参数,则强制转换 _data_ 为String, Stream, Bytes或者 Json。
* **noCache** – true | false,_true_ 请求和响应不会使用缓存。
例子:sdk/samples/communication/file-download.htm 和 sdk/samples/communication/http.tis
通告
onRequest(rq: Request)
: 在视图上定义时,将在执行请求之前调用方法。处理程序可以调用 rq.fulfill()
为请求提供数据
onRequestResponse(rq: Request)
: 在完成请求(成功或失败)后将调用该方法。
View 事件
绑定视图事件使用 view.on(eventname, handler)
方法:
- eventname – 字符串,包含以下名称之一,并且可以选择“name.namespace”形式的任意命名空间名称
- handler – 事件触发时调用的函数
事件名称
"size"
: 在视图(窗口)的尺寸更改后生成事件。使用view.box()方法获取尺寸。
"sizing"
: 用户正在更改可调整大小窗口的尺寸时生成事件。函数处理程序应具有签名:function(sizingParams)
,其中sizingParams对象的结构:{ x:integer, y:integer, width:integer, height: integer, side: 1...9 }, – proposed dimensions of the window and side
is a window side/corner dragged to change window dimension.
"move"
: 在视图(窗口)的位置改变之后生成事件。使用view.box()方法获取尺寸和位置。
"moving"
: 用户通过标题拖动窗口时会生成事件。函数处理程序应具有签名:function(movingParams)
,其中 movingParams
对象结构:{ x:integer, y:integer, width:integer, height: integer }
– 窗口尺寸。 函数处理程序会改变movingParams。
"statechange"
: view (maximized, minimized, hidden, shown ) 状态发生改变的时候触发事件。查看 View.state 属性。
"resolutionchange"
: 当窗口PPI (pixels per inch scale factor) 发生变化的时候触发事件。要获得实际每英寸像素值,请使用:
var ppi = (1in).toFloat(#px);
获取每像素数:
var ppdip = (1dip).toFloat(#px);
"mediachange"
: 当其中一个媒体变量发生变化(包括分辨率变化)时触发事件,例如当监视器数量或颜色深度发生变化时。
"replacement-start"
: 当用户开始通过UI方式替换(移动和/或调整大小)窗口时(例如,通过标题拖动)触发事件。
"replacement-end"
: 在用户通过UI方式完成窗口替换(例如,通过标题拖动)之后触发事件。
"activate"
: Sciter窗口被激活或停用时会触发事件。事件处理函数可能已定义参数模式,该模式将采用以下值之一:
- false – 窗口停用
- true – 窗口以某种方式激活但不是通过鼠标激活
- #by-mouse – 通过鼠标点击激活窗口。
"closing"
: 该事件作为视图(窗口)关闭序列的一部分生成,在视图文档被销毁之前传递。