如何在普通html中操作触发iframe中zk页面组件事件

html-css011

如何在普通html中操作触发iframe中zk页面组件事件,第1张

如何在普通html中操作触发iframe中zk页面组件事件

首先问题关键是,普通html页面与zul页面必须同域下,否则浏览器不允许跨域操作

思路:获取iframe 中zk页面中zk相关组件操作的js api,使用zk js api操作zk页面元素及激发事件

1,js关键代码

Js代码

function fireBtnEvent(){  

//获取iframe中的window对象

  var ifrmWindow =document.getElementById('ifrm').contentWindow 

//获取zk页面中的jq对象,使用jq对象查找zk页面元素

var jq =ifrmWindow.jq 

//获取zk页面中js对象zk,用于dom到zk widget的转化与事件的构造

var zk =ifrmWindow.zk 

var btnLogin =zk.Widget.$(jq("$btnLogin"),ifrmWindow.document) 

ifrmWindow.zAu.send(new zk.Event(btnLogin,"onClick",null)) 

} 

function fireBtnEvent(){ //获取iframe中的window对象 var ifrmWindow =document.getElementById('ifrm').contentWindow//获取zk页面中的jq对象,使用jq对象查找zk页面元素 var jq =ifrmWindow.jq//获取zk页面中js对象zk,用于dom到zk widget的转化与事件的构造 var zk =ifrmWindow.zkvar btnLogin =zk.Widget.$(jq("$btnLogin"),ifrmWindow.document)ifrmWindow.zAu.send(new zk.Event(btnLogin,"onClick",null))}

2,html页面完整代码

Html代码

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">

<html>

<head>

<title>New Document </title>

<meta name="Generator" content="EditPlus">

<meta name="Author" content="">

<meta name="Keywords" content="">

<meta name="Description" content="">

<script>

function fireBtnEvent(){  

//获取iframe中的window对象  

var ifrmWindow =document.getElementById('ifrm').contentWindow 

//获取zk页面中的jq对象,使用jq对象查找zk页面元素  

var jq =ifrmWindow.jq 

//获取zk页面中js对象zk,用于dom到zk widget的转化与事件的构造  

var zk =ifrmWindow.zk 

var btnLogin =zk.Widget.$(jq("$btnLogin"),ifrmWindow.document) 

ifrmWindow.zAu.send(new zk.Event(btnLogin,"onClick",null)) 

}  

</script>

</head>

<body>

<button id="demo" onclick="fireBtnEvent()">test</button>

<iframe id="ifrm" height="500px" width="500px" src="login.zul" style="border:1px solid red">

</iframe>

</body>

</html>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ""><html><head><title>New Document </title><meta name="Generator" content="EditPlus"><meta name="Author" content=""><meta name="Keywords" content=""><meta name="Description" content=""><script>function fireBtnEvent(){ //获取iframe中的window对象 var ifrmWindow =document.getElementById('ifrm').contentWindow//获取zk页面中的jq对象,使用jq对象查找zk页面元素 var jq =ifrmWindow.jq//获取zk页面中js对象zk,用于dom到zk widget的转化与事件的构造 var zk =ifrmWindow.zkvar btnLogin =zk.Widget.$(jq("$btnLogin"),ifrmWindow.document)ifrmWindow.zAu.send(new zk.Event(btnLogin,"onClick",null))} </script></head><body><button id="demo" onclick="fireBtnEvent()">test</button><iframe id="ifrm" height="500px" width="500px" src="login.zul" ></iframe></body></html>

3,zk页面完整代码

Xml代码

<xml version="1.0" encoding="utf-8" >

<pagecacheable="false" language="xul/html" zscriptLanguage="Java" contentType="text/htmlcharset=UTF-8" >

<taglib uri="" prefix="c" >

<taglib uri="" prefix="z" >

<div

style="background: url('images/headerbg.png') repeat-x background-position:0 -53pxheight:100%"

xmlns:w="client" xmlns:n="native" xmlns=""

xmlns:xsi=""

xsi:schemaLocation="">

<window apply="${z:ctrl('loginController')}" width="300px"

height="140px" onOK="Events.postEvent("onClick",btnLogin,null)"

mode="overlapped" position="center,top" style="margin-top:100px">

<caption>

<div align="left" >

<label value="欢迎您使用录音查询系统" style="font-weight:boldfont-size:14px"$amp>amp$lt/label>

</div>

</caption>

<grid oddRowSclass="non-odd" height="115px">

<columns>

<column width="95px" align="right"$amp>amp$lt/column>

<column $amp>amp$lt/column>

</columns>

<rows>

<row>

<cell>用户名:</cell>

<cell>

<textbox id="txtUsername"$amp>amp$lt/textbox>

</cell>

</row>

<row>

<cell>密码:</cell>

<cell>

<textbox id="txtPassword" type="password"$amp>amp$lt/textbox>

</cell>

</row>

<row height="50px">

<cell colspan="2" align="center">

<button label="登录" id="btnLogin" forward="onLogin" />

</cell>

</row>

</rows>

</grid>

</window>

</div>

<xml version="1.0" encoding="utf-8" ><page cacheable="false" language="xul/html" zscriptLanguage="Java" contentType="text/htmlcharset=UTF-8" ><taglib uri="" prefix="c" ><taglib uri="" prefix="z" ><div xmlns:w="client" xmlns:n="native" xmlns="" xmlns:xsi="" xsi:schemaLocation=""><window apply="${z:ctrl('loginController')}" width="300px" height="140px" onOK="Events.postEvent("onClick",btnLogin,null)" mode="overlapped" position="center,top" ><caption><div align="left" ><label value="欢迎您使用录音查询系统" $amp>amp$lt/label></div></caption><grid oddRowSclass="non-odd" height="115px"><columns><column width="95px" align="right"$amp>amp$lt/column><column $amp>amp$lt/column></columns><rows><row><cell>用户名:</cell><cell><textbox id="txtUsername"$amp>amp$lt/textbox></cell></row><row><cell>密码:</cell><cell><textbox id="txtPassword" type="password"$amp>amp$lt/textbox></cell></row><row height="50px"><cell colspan="2" align="center"><button label="登录" id="btnLogin" forward="onLogin" /></cell></row></rows></grid></window></div>

4,其实更多操作widget对象的方法都类似,只要掌握1中的方法即可

1、ZK是一套开放源码、相容於XUL/HTML标准、Java写成的开发工具。 2、ZK是一套以AJAX/XUL/Java为基础的网页应用程序开发框架,用于丰富网页应用程序的使用界面。最大的好处是在设计AJAX网络应用程序时,轻松简便的操作就像设计桌面程序一样。ZK包含了一个以AJAX为基础、事件驱动event-driven、高互动性的引擎,同时还提供了丰富多样、可重复使用的XUL与HTML组件,以及以XML为基础的使用界面设计语言ZKUserinterfacesMarkupLanguage。 3、ZK提供超过60个XUL组件及80个XHTML组件。举凡listbox,slider,audio,slider,tree,combobox,tabbox,auto-completion等均有支援。ZK亦提供FCKeditor和Dojo的组件,让使用者直接以Java控制,无须使用JavaScript。