kenvifire 发表于 2011-12-21 08:44

地址栏javascript

<p><strong>0. 前言</strong></p>
<p>所谓IE地址栏表达式,就是在IE的地址栏中输入 javascript:&lt;代码&gt;,执行某些功能,来动态改变原有页面的参数以达到某些目的,例如开放被禁止的按钮、显示原本隐藏的图片等等。本文将就IE地址栏的使用方法做一个详细的说明。</p><span id="more-60"></span>
<p><strong>1. 表达式的书写方法</strong></p>
<p>在IE的地址栏中输入 javascript:&lt;代码&gt;,即可在当前页面上直接执行指定的代码并立即看到效果。而且,&lt;代码&gt;中可以包含多条语句,甚至可以包含 if/for 等流程控制语句。</p>
<p>代码一般有两种写法:</p>javascript:&lt;表达式&gt;
<p>该写法将会执行表达式,并将表达式的结果在当前页面内显示。</p>javascript:&lt;函数&gt;
<p>该表达式将会执行指定的函数,而当前页面的显示不会受到影响。</p>
<p>那么IE如何区分地址栏中输入的代码到底是函数还是表达式?其实很简单,代码的最后一条语句以参数列表 () 结束,则作为函数处理,不更新页面显示;代码的最后一条语句不以 () 结束,则作为表达式处理,在当前页面内显示表达式的计算结果。</p>
<p>例如,在IE的地址栏中输入:</p>javascript:1+2
<p>该表达式的末尾并非参数列表,因此IE将1+2看作表达式,执行结果将显示在当前窗口内:</p>3
<p>而下面这段代码:</p>javascript:alert("Hello, world!")
<p>代码末尾为参数列表,因此IE将其看作函数,执行之后将出现弹出窗口,但是网页的内容不会有任何变化。再如,</p>javascript:alert
<p>该代码执行后,当前窗口内显示:</p>
<p>这是因为代码末尾不是参数列表,因此IE将其作为表达式来处理。alert 为 window 对象的一个方法,也算作“”,所以出现了上面的结果。</p>
<p>再看下面的例子:</p>javascript:a=1;b=2;c=3;alert(a+b*c)
<p>虽然该段代码中包含了赋值表达式和alert()函数,但由于代码最末尾是参数列表,因此页面内容不会更新。</p>
<p><strong>2. 将表达式转化为函数</strong></p>
<p>通常我们希望使用 javascript:&lt;函数&gt; 这种格式,因为 javascript:&lt;表达式&gt;
会改变页面内容而使得修改失去意义。但有时我们不得不使用赋值表达式来达到目的,这就需要将表达式转换为函数来执行。这就需要利用一个特殊的函
数:void()。该函数带有一个参数。</p>
<p>比较常用的转化方式有两种。一种是将表达式作为void()函数的参数,例如:</p>javascript:void(a=1)
<p>执行之后页面内容没有任何变化,但是页面内名为a的变量已经赋值为1了。另一种方法是在整个代码的最后执行void()函数,例如:</p>javascript:a=1;void(0)
<p>也可以达到同样的效果。</p>
<p>在网上通常可以找到一些网页的hack代码,例如:</p>javascript:void(document.all.btn1.disabled=false);void(document.all.btn2.disabled=false)
<p>该段代码对每一个表达式执行了一次 void()函数。实际上有更简单的方法,只需要执行一次即可:</p>javascript:document.all.btn1.disabled=false;document.all.btn2.disabled=false;void(0)
<p><strong>3. 常用hack代码</strong></p>
<p>这里介绍一些常用的 hack 代码段,大家可以灵活运用。</p>
<p><strong>3.1 查找页面内元素</strong></p>
<p>使用 document 对象的 all 集合和 getElement 系列方法可以轻易地找到页面上各种元素。如果知道一个元素的id(假设为myelement),则可以通过下面两种方式获得该元素:</p>document.all.myelementdocument.getElementById('myelement')
<p>如果不知道元素的id,但知道元素的HTML标签名(假设为TAGNAME),则可以通过下面的代码获得所有相同标签的元素:</p>document.getElementsByTagName('TAGNAME')
<p>返回值为一个集合,通过该集合的 item 方法可以获取其中的一个元素。例如,修改页面上的第三个超链接的颜色为绿色:</p>javascript:document.getElementsByTagName('A').item(2).style.color="green";void(0)
<p>将页面上所有的 TD 元素的背景颜色修改为红色:</p>javascript:tds=document.getElementsByTagName('TD');for(i=0;i&lt;tds.length;i++){tds.item(i).style.backgroundColor="red";}void(0)
<p><strong>3.2 定义函数</strong></p>
<p>可以在地址栏中直接书写function语句来定义函数。例如,先在地址栏中输入:</p>javascript:function hello(){alert("Hello!");}
<p>确定之后,再次在地址栏中输入:</p>javascript:hello()
<p>即可看到弹出窗口。</p>
<p><strong>3.3 显示效果类特效</strong></p>
<p>通过各个元素的 style.zoom 属性可以设置该元素的显示比例。例如,将页面整体显示比例扩大为150%:</p>javascript:document.style.zoom='150%';void(0)
<p>通过各个元素的 style.display 和 style.visibility
属性可以显示/隐藏该元素。style.display=""可以显示元素,style.display="none"可以隐藏元素,而且被隐藏的元素不
会占用页面位置,就像根本不存在一样;style.visibility=false可以隐藏元素,但是被隐藏的元素还会保持原有的位置和大
小;style.visibility=true可以显示元素。例如,隐藏所有图片:</p>javascript:a=document.getElementsByTagName('IMG');for(i=0;i&lt;a.length;i++)a.item(i).style.visibility=false;void(0)
<p><strong>3.4 其他</strong></p>
<p>显示页面所有链接:</p>javascript:a=document.getElementsByTagName("A");newwindow=window.open("newwindow");newwindow.document.open();for(i=0;i&lt;a.length;i++){newwindow.document.write("&lt;a href='"+a.item(i).href+"'&gt;"+a.item(i).innerText+"&lt;/a&gt;<br>");}newwindow.document.close();void(0)<br>

<div class="entrymeta">
<div class="postinfo">&nbsp;</div></div>
页: [1]
查看完整版本: 地址栏javascript