易截截图软件、单文件、免安装、纯绿色、仅160KB

Flex3与页面JavaScript的相互调用

 日前做项目,需要把页面的JS代码抽出来放到一个.js文件中,由于flex程序是以div+SWFObject的方式嵌入到页面的,为了达到目标网站只需要引用一个.js文件即实现引用项目工程的目的,所以也要把SWFObject的代码放到.js文件中。
思路是用document.write()把引用swf文件的代码写进页面,然后把flex要调用的js函数都放到.js文件中
很快,就迁移完毕了。测试ing...
想不到的是,flex中用ExternalInterface.call("methodName",params);调JS函数缺没有返回值,用alert("a")弹出一下,果然没有调用到。这是为什么呢?难道把SWF用document.write的方式加入到页面后权限降低了?
放狗找了一下,似乎大家的调用都很正常……唉……人生最痛苦的事情莫过于此了。
突然想到infoq的一些连接显示的是类似javascript:void(0)的字样,于是乎,我想到了用flex的URLRequest调用页面的JS。
立刻尝试
flex中:
var req:URLRequest = new URLRequest("javascript:test('hello')");
navigateToURL(req,"_self");
在JS中:
function test(str){
alert("你好" + str);
return "world";
}
浏览器弹出对话框,里面的文字显示也正常。
这说明用URLRequest调用是没问题的。
但是……浏览器却跳转了,页面显示world。
很明显,不可以单纯地这么调。
怎么办呢?翻了一下flex的文档,原来ExternalInterface有个addCallBack的方法,使用它可以建一个JS的回调函数
使用方法如下:
ExternalInterface.addCallBack("returnValue",returnValue);//第一个参数是开放给JS的函数名,第二个参数是对应的AS方法。
flex中:
public function invokeJavaScript(details:String):void{
var JavaScriptRequest:URLRequest = new URLRequest("javascript:" + details);
navigateToURL(JavaScriptRequest,"_self");
}
public function returnValue(value:String):void{
this.value = value;
}
private function testASJS():void{
invokeJavaScript("test('seal','老胡')");
}
js中:
function thisMovie(flexName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[flexName];
} else {
return document[flexName];
}
}
function sendToActionScript(flexName,value) {
thisMovie(flexName).returnValue(value);
}
function test(flexName,param1){
sendToAction


相关文档:

修改flex应用默认的装载界面(DownloadProgressBar)

flex应用看久了,一个默认的装载loading界面就会导致审美疲劳,下面提供一种方法,让你可以自定义你的装载界面。
1,在src目录下建立自定义类,两个文件代码如下   在adminConsole项目可找到。
   *********************************************************************************
1、Preloader ......

向Asp.net页面添加javascript脚本

1、使用Page.ClientScript.RegisterClientScriptBlock
RegisterClientScriptBlock方法可以把JavaScript函数放在页面的顶部。也就是说,该脚本用于在浏览器中启动页面。
Code
<%@ Page Language="C#" %>
<script runat="server">
protected void Page_Load(object send ......

javascript 学习笔记(3)

1. 函数在执行完 return 指令后就会停止执行代码.
function test(Num1,Num2){
return Num1+Num2;
alert(Num1+Num2); //never outputs

2. javascript 函数不能重载,也就是说可以在同一个作用域中定义多个同名函数,而最终执行的是后一个函数.
function test(num){
alert(num+10);
}
function ......

[Flex 2] 00 Introduction


===============================
               图灵程序设计丛书(Web开发系列)
===============================
  The Essential Guide to Flex 2 with ActionScript 3.0
                     &nb ......

[Flex 2] 01 RIA


#####################
# B/S & C/S
#####################
    B/S(Browser/Server,浏览器-服务器)结构,客户端只需浏览器即可,跨平台性较好;简化了客户端的工作,相应地对服务器性能要求较高;与此同
时,因为它(尽管有AJAX)无法从根本上改变“网络应用程序的表示层建立于HTML页面&rdqu ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号