今天主要学习一下js与flash是如何通讯滴。
1、先学习一下
getURL(url, window, variables)
使用 getURL 语句,可以让指定的浏览器窗口,转向显示指定的URL地址。参数(url)指定要显示WEB页面文档的 URL 地址。参数(window)指定要要显示WEB页面文档的浏览器窗口,它可以是指定为自定义的窗口名称,也可以
如果想让它执行调用js函数执行,那么可以这样
on (release) {
 getURL(\"JavaScript:alert('hello,world')\");
}
如果调用自定义的函数
on (release) {
 getURL(\"JavaScript:aiqi('test')\");
}
那么html页面里要定义这个函数,比如
function aiqi(s){
alert(s);
}
php中的正则表达式的preg_match_all可一次得出一二维数组用来多次匹配,比如:

preg_match_all('/<img src="([^"])">/','<img src="1.jpg"> <img src="2.jpg"> <img src="3.jpg">',$arr);
可得到这样一个数组:
Array
(
   [0] => Array
       (
           [0] => <img src="1.jpg">
           [1] => <img src="2.jpg">
           [2] => <img src="3.jpg">
       )

   [1] => Array
       (
           [0] => 1.jpg
           [1] => 2.jpg
           [2] => 3.jpg
       )

)

而同样的功能用js来实现,可能就要麻烦点,用匿名RexExp对象的exec方法只能匹配到第一个<img src="1.jpg">,网上最常见的就是用非匿名RegExp对象加循环进行多次匹配。

以下方法,使用匿名RegExp对象实现reg_match_all类似功能:
var arr=new Array();
arr[0]='<img src="1.jpg"> <img src="2.jpg"> <img src="3.jpg">'.match(/<img src="([^"])">/g);
arr[1]=new Array();
for(var i=0;i<arr[0].length;i++)
   arr[1][i]=/<img src="([^"])">/.exec(arr[0][i]);

要制作一个在线聊天的程序,在做最后的修饰时,需要对获得的信息即时滚动以保证用户总能看到最新消息。

聊天程序是基于AJAX设计的,没有用框架,消息容器是一个DIV,所以问题就在于如何控制DIV的滚动条。

网上有资料介绍说通过设置scrollTop属性来控制滚动条位置,具体可参见:
http://hi.baidu.com/chen1345789/blog/item/de727bfb45587b176d22eba1.html

但同样的代码拿到我这里却完全失效,又仔细查了下资料说XHTML标准下scrollTop的值恒为0,解决办法是使用document.documentElement.scrollTop代替document.body.scrollTop,讲了半天所解决的是整个页面的滚动条。这个方法我是用不了了,因为不是框架结构,所以不可能用body的滚动条控制浏览信息。

网上关于这个问题的资料很少,连CSDN上也说没有办法。

不死心,后来查DHTML手册得知DIV有个doScroll方法可以用来模拟滚动条点击,但很令人失望,到了我这里又是完全失效,难道又不被XHTML支持?

最后终于被我找到三种控制DIV内容滚动的方法:
方法一:
使用锚标记要滚动到的位置,然后通过click方法模拟点击滚动到锚所在位置
[codes=html]
<script language="javascript1.2" type="text/javascript">
function onGetMessage(context)
{
       msg.innerHTML+=context;
       msg_end.click();
}

</script>

<div style="width:500px;overflow:auto">
   <div id="msg" style="overflow:hidden;width:480px;">
   </div>
   <div><a id="msg_end" name="1" href="#1">&nbsp</a></div>
</div>
[/codes]

方法二:
利用DIV的scrollIntoView方法,将最底端滚动到可视位置

[codes=html]
<script language="javascript1.2" type="text/javascript">
function onGetMessage(context)
{
       msg.innerHTML+=context;
       msg_end.scrollIntoView();
}

</script>

<div style="width:500px;overflow:auto">
   <div id="msg" style="overflow:hidden;width:480px;">
   </div>
   <div id="msg_end" style="height:0px; overflow:hidden">&nbsp;</div>
</div>
[/codes]

方法三:
这个比较复杂也比较灵活一点,就是利用DIV+JS+图片构造一个滚动条,当然了图片是怎么好看怎么用了。
主要部分就是外层的DIV加个overflow:hidden属性,通过js代码调整内层DIV的margin-left和margin-top来控制内容的滚动,由于上面两种方法已经可以满足需求,所以这种方法没具体做深究,有兴趣的可以试一下


后记:最后发现最初的obj.scrollTop=obj.scrollHeight;的方法也可以使用,最初没测试成功是因为DIV要有Height属性

1、IE与Firefox下实现方式不同,可通过以下方式兼容:
[codes=js]
function createXMLHttpRequest() {
    var request = false;
    if(window.XMLHttpRequest) {
      request = new XMLHttpRequest();
      if(request.overrideMimeType) {
        request.overrideMimeType('text/xml');
      }
    } else if(window.ActiveXObject) {
      var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
      for(var i=0; i<versions.length; i++) {
        try {
          request = new ActiveXObject(versions[i]);
          if(request) {
            return request;
          }
        } catch(e) {
          //alert(e.message);
        }
      }
    }
    return request;
}
[/codes]

2、避免进行跨与访问
若无法避免可通过服务器 对象 XMLHTTP进行中转

3、对于返回的responseXML,只在请求的URL能通过XML验证时才有效

4、responseXML.documentElement可得到根元素

5、getElementsByTagName的参数,ie支持多级标签如"body//div//a",firefox则不支持,"*"得到所有元素
分页: 7/38 第一页 上页 2 3 4 5 6 7 8 9 10 11 下页 最后页 [ 显示模式: 摘要 | 列表 ]