专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Javascript教程 » ajaxeval:Ajax UTF-8还是GB2312 eval 还是execScript »正文

ajaxeval:Ajax UTF-8还是GB2312 eval 还是execScript

来源: 发布时间:星期四, 2008年12月25日 浏览:31次 评论:0
两个问题:
题:
xmlhttp responseText 默认总是utf-8编码前段时间为了以最小成本解决这个问题索性整个项目用utf-8编码网上解决思路方法不多而且都是比较乱 7 8糟不喜欢又不能以后所有都用utf-8
第 2题:
xmlhttp 载入页javascript脚本不能执行事件驱动却仍然可用前段时间为了回避这东西干脆把脚本全写起了恶心总这么干每次都要载入几百Kjs文件恶心
那么现在有时间了最用正统方式解决
xmlhttp 本来就是用来操作xmlresponseText 返回东西使用网上 2进制硬性编码把UTF-8改成GB2312编码思路方法自然不可靠而且如果处理其它编码则无能为力使用 responseXML 返回 IXMLHTTPRequest 对像依赖xml编码声明自然不可能乱码没道理不用
<?xml version="1.0" encoding="gb2312"?>
<body>
<![CDATA[
这里将是我需要html文本
]]>
</body>
脚本可以这么写行;
Value = xmldom.documentElement.text;
Value 即是我所需要html文本相对硬性以字节流去改编码何乐而不为呢?
题基本解决管你用什么编码utf-8,gb2315.gbk,还是8859-1 改下文档声明即可
个问题即然以经用了xml那么第 2个问题也很容易解决简单分析下我们需求执行个页面脚本由其是在载入页上普遍是在两个地方载的HTML的前声明和载入完成时至于页面中使用用DHTML事件驱动即可那么变更下XML结构
<?xml version="1.0" encoding="gb2312"?>
<content>
<!-- 需要在页面载入前定义脚本 -->
<onStart>
<![CDATA[
// 这里脚本相当于写在head里;
]]>
</onStart>
<!-- HTML 内容 -->
<body>
<![CDATA[
HtmlCode
]]>
</body>
<!-- 需要在页面载入后定义脚本 -->
<onEnd>
<![CDATA[
// 这里脚本相当于写在 body 后;
]]>
</onEnd>
</content>
处理脚本试着写这几行;
BeginScript = xmldom.documentElement.selectSingleNode("onStart").text;
htmlCode = xmldom.documentElement.selectSingleNode("body").text;
endScript = xmldom.documentElement.selectSingleNode("onEnd").text;
IE下似乎没问题但是firefox下报错可恨firefox 下竟然是 textContent selectSingleNode思路方法也不起作用 浏览器识别思路方法随处抄个就好了现在我只去管 IE 和 Firefox 我机器上也只有这两个再改下代码;
以下前 3行是从网易博客上抄下来有问题找网易好了实在懒得自己再写更别提让我上网找了
var isIE=(document.all&&document.getElementById&&!window.opera)?true:false;
var isMozilla=(!document.all&&document.getElementById&&!window.opera)?true:false;
var isOpera=(window.opera)?true:false;
(isIE){
BeginScript = xmldom.documentElement.getElementsByTagName("onStart").item(0).text;
htmlCode = xmldom.documentElement.getElementsByTagName("body").item(0).text;
endScript = xmldom.documentElement.getElementsByTagName("onEnd").item(0).text;
}{
BeginScript = xmldom.documentElement.getElementsByTagName("onStart").item(0).textContent;
htmlCode = xmldom.documentElement.getElementsByTagName("body").item(0).textContent;
endScript = xmldom.documentElement.getElementsByTagName("onEnd").item(0).textContent;
}
完成剩下就是如何去执行
需要动态执行段脚本能常会到 3种思路方法
a) JavaScript 中 Global 对像 eval 思路方法;
b) DHTML window 中 execScript 思路方法;
c) JavaScript 中 Function; 对像;
3种思路方法各有优劣
脚本上下文关系使用上下文明显存在作用域问题执行后作用域仅在或思路方法体内恶心问题;
第 2种本身在DHTML顶层对像window 上执行不存在作用域问题但是execScript 思路方法却存在浏览器兼容问题只是IE专有思路方法在Firefox 上即无法使用;
第 3种除了使用不便以外必竟是用来声明个思路方法如只需要声明个变量也是个很烦人问题
如果不存在浏览器兼容问题考虑那么使用第 2种是最好选择
第 3种不作考虑
若可以解决作用域问题则是最好
我想到思路方法如下;
我们在网页里声明个变量
即 var author = "戏得散人";
或声明
即:
function getBlogUrl{
author + "博客地址: http://shizhong8841.blog.163.com";
}
在这个时候我们相当于
window.author = "戏得散人";
window.getMyBlogUrl = function{
this.author + "博客地址:http://shizhong8841.blog.163.com";
}
那么我们只要稍微扩展下window对像即可
window.runScript = function(str){
eval(str);
}
神奇 this 接下来只要以 this.a=0; 或 this.funName = function(arg0){}; 这种方式编写脚本 runScript(str); 思路方法则相当于在页面中定义全局属性和思路方法即可以辟开作用域问题达到我们
现在全部问题解决并且在 InternetElpxerer 6.0 和 Firefax 2.0 下全部通过测试代码太乱就不往上贴了丢人但是思想应该还是正确
更多问题以后再说
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: