Ajax,UTF-8还是GB2312eval还是execScript
作者:mobiledu2502910337 | 来源:互联网 | 2022-03-11 23:51
讨厌的东西。关于Ajax获取HTML内容编码,与JavaScript载入脚本的动态执行问题。
两个问题:
第一题:
xmlhttp 的 responseText 默认总是utf-8的编码,前段时间为了以最小成本解决这个问题,索性整个项目用utf-8编码。网上解决的方法不多,而且都是比较乱七八糟的,不喜欢。又不能以后所有都用utf-8。
第二题:
xmlhttp 载入页的Javascript脚本,不能执行。事件的驱动却仍然可用,前段时间为了回避这东西,干脆把脚本全写一起了。恶心,总这么干,每次都要载入几百K的js文件,恶心。
那么,现在有时间了,最用正统的方式解决一下,
xmlhttp ,本来就是用来操作xml的,responseText 返回的东西,使用网上的二进制硬性编码把UTF-8改成GB2312编码的方法自然不可靠,而且如果处理其它的编码则无能为力。使用的 responseXML 返回的 IXMLHTTPRequest 对像,依赖xml的编码声明,自然不可能乱码。没道理不用。
这里将是我需要的html文本,
]]> 脚本可以这么写一行;
returnValue = xmldom.documentElement.text;
returnValue 即是我所需要的html文本,相对硬性的以字节流去改编码,何乐而不为呢?
第一题基本解决,管你用什么编码,utf-8,gb2315.gbk,还是8859-1 改下文档声明即可。
第一个问题即然以经用了xml,那么第二个问题也很容易解决,简单的分析一下我们的需求,执行一个页面的脚本,由其是在载入的页上,普遍是在两个地方,载之HTML之前的声明和载入完成时的调用。至于页面中的使用,用DHTML的事件驱动即可,那么变更一下XML的结构。
// 这里的脚本相当于写在head里;
]]>
HtmlCode
]]>
// 这里的脚本相当于写在 body 后的;
]]>
处理脚本,试着写这几行;
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 ,我机器上也只有这两个,再改下代码;
以下的前三行,是从网易博客上抄下来的。有问题找网易好了。实在懒得自己再写,更别提让我上网找了。
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;
if(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;
}else{
BeginScript = xmldom.documentElement.getElementsByTagName("onStart").item(0).textContent;
htmlCode = xmldom.documentElement.getElementsByTagName("body").item(0).textContent;
endScript = xmldom.documentElement.getElementsByTagName("onEnd").item(0).textContent;
}
完成。剩下的,就是怎么去执行。
需要动态的执行一段脚本,能常会到三种方法。
a) Javascript 中 Global 对像的 eval() 方法;
b) DHTML window 中的 execScript() 方法;
c) Javascript 中的 new Function(); 对像;
三种方法,各有优劣,
第一种,脚本的上下文关系使用调用时的上下文,明显的存在作用域问题,执行后的作用域仅在调用的函数或方法体内。恶心的问题;
第二种,本身在DHTML的顶层对像window 上执行,不存在作用域问题,但是execScript() 方法,却存在浏览器兼容问题。只是IE的专有方法。在Firefox 上即无法使用;
第三种,除了使用不便以外,必竟是用来声明一个方法的,如只需要声明一个变量的话,也是个很烦人的问题。
如果不存在浏览器兼容问题的考虑,那么使用第二种是最好的选择。
第三种,不作考虑。
第一种,若可以解决作用域问题,则是最好的。
我想到的方法如下;
我们在网页里声明一个变量,
即 var author = "戏得散人";
或声明一个函数。
即:
function getBlogUrl(){
return author + "的博客地址: http://shizhong8841.blog.163.com";
}
在这个时候,我们相当于
window.author = "戏得散人";
window.getMyBlogUrl = function(){
return 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 下全部通过测试。写的代码太乱,就不往上贴了,省的丢人,但是思想,应该还是正确的。
更多的问题,以后再说。
推荐阅读
-
本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ...
[详细]
蜡笔小新 2023-12-09 19:58:36
-
前言对于从事技术的人员来说ajax是这好东西,都会使用,而且乐于使用。但对于新手,开发一个ajax实例,还有是难度的,必竟对于他们这是新东西。leo开发一个简单的ajax实例,用的是 ...
[详细]
蜡笔小新 2023-10-16 17:08:23
-
-
表单提交前的最后验证:通常在表单提交前,我们必须确认用户是否都把必须填选的做了,如果没有,就不能被提交到服务器,这里我们用到表单的formname.submit()看演示,其实这个对于我们修炼道 ...
[详细]
蜡笔小新 2023-10-15 18:44:55
-
文章目录WebAPI简介DomDom树获取Dom元素事件事件三要素操作dom元素innerHTMLinnerText实战案例:实现网页计数器WebAPI简介什么是AP ...
[详细]
蜡笔小新 2023-10-15 12:28:05
-
SVG是使用XML来描述二维图形和绘图程序的语言。SVG遵循的是xml的规范,与html5的使用有所区别SVG绘制出来的是矢量图,放大之后不会失真官方文 ...
[详细]
蜡笔小新 2023-10-14 15:30:33
-
但有时候,需要当某事件触发时,我们先做一些操作,然后再跳转,这时,就要用JAVASCRIPT来实现这一跳转功能。下面是具体的做法:一:跳转到新页面,并且是在新窗口中打开时:复制代码代码如下:fu ...
[详细]
蜡笔小新 2023-10-13 12:25:13
-
本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ...
[详细]
蜡笔小新 2023-12-12 13:57:58
-
本文介绍了网页播放视频的三种实现方式,分别是使用html5的video标签、使用flash来播放以及使用object标签。其中,推荐使用html5的video标签来简单播放视频,但有些老的浏览器不支持html5。另外,还可以使用flash来播放视频,需要使用object标签。 ...
[详细]
蜡笔小新 2023-12-10 13:24:30
-
本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ...
[详细]
蜡笔小新 2023-12-09 03:01:43
-
CSS|网格-行-结束属性原文:https://www.gee ...
[详细]
蜡笔小新 2023-10-17 15:21:56
-
一、用户行为三剑客以下3个CSS属性:user-select属性可以设置是否允许用户选择页面中的图文内容;user-modify属性可以设置是否允许输入 ...
[详细]
蜡笔小新 2023-10-17 14:35:15
-
使用python输入PDF编号自动下载freepatentsonline.com的文档#!usrbinenvpython3#codingutf-8#Version:python3. ...
[详细]
蜡笔小新 2023-10-17 12:29:08
-
Itwasworkingcorrectly,butyesterdayitstartedgiving401.IhavetriedwithGooglecontactsAPI ...
[详细]
蜡笔小新 2023-10-15 16:40:16
-
用JavaScript实现的太空人手表-JS写的太空人手表,没有用canvas、svg。主要用几个大的函数来动态显示时间、天气这些。天气的获取用到了AJAX请求。代码中有详细的注释 ...
[详细]
蜡笔小新 2023-10-13 17:21:38
-
Iwouldliketobeabletohaveasidebarthatcanbetoggledinandoutonabuttonpress.However ...
[详细]
蜡笔小新 2023-10-13 12:28:22
-
mobiledu2502910337
这个家伙很懒,什么也没留下!