Java技术
写了那么长时间js,总认为自己可以驾驭它了,每想到这回败给了undefined。

声明:本文旨在技术讨论,强烈鄙视利用这种方法投放病毒,毒害他人的行为!!!

校内网的涂鸦板,可以自己写HTML,但还是有限制的,不能有script。今天就来看看有没有办法突破限制,执行脚本,玩点花样:),别做坏事哦。
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]);

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则不支持,"*"得到所有元素
动态加载js:
[codes=js]
  var script=document.createElement("script");
  script.text="alert(1);";
  var body=document.getElementsByTagName('body')[0];
  body.appendChild(script);
[/codes]
或者
[codes=js]
  var script=document.createElement("script");
  script.src='test.js';
  var body=document.getElementsByTagName('body')[0];
  body.appendChild(script);
[/codes]

注意:网页中必须存在body元素
分页: 1/2 第一页 1 2 下页 最后页 [ 显示模式: 摘要 | 列表 ]