盒里的百合花 發表於 2020-4-16 10:51:00

javascript伪协议

<h2><strong>一&nbsp; 什么是伪协议</strong></h2>
<p>伪协议不同于因特网上所真实存在的协议,如http://,https://,ftp://,</p>
<p>而是为关联应用程序而使用的.如:tencent://(关联QQ),data:(用base64编码来在浏览器端输出二进制文件),还有就是javascript:</p>
<p>我们可以在浏览地址栏里输入"javascript:alert('JS!');",点转到后会发现,实际上是把javascript:后面的代码当JavaScript来执行,并将结果值返回给当前页面。</p>
<p>&nbsp;</p>
<h2><strong>二&nbsp; javascript:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行</strong></h2>
<p>&nbsp;</p>
<p>将javascript代码添加到客户端的方法是把它放置在伪协议说明符javascript:后的URL中。这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行。如果javascript:URL中的javascript代码含有多个语句,必须使用分号将这些语句分隔开。这样的URL如下所示:</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre>1 javascript:var now = new Date(); "&lt;h1&gt;The time is:&lt;/h1&gt;" + now;</pre>
</div>
<p>&nbsp;</p>
<p>当浏览器装载了这样的URL时,它将执行这个URL中包含的javascript代码,并把最后一条javascript语句的字符串值作为新文档的内容显示出来。这个字符串值可以含有HTML标记,并被格式化,其显示与其他装载进浏览器的文档完全相同。</p>
<p>在浏览器打开javascript:URL的时候,它会先运行URL中的代码,当返回值不为undefined的时候,前页链接会替换为这段代码的返回值。</p>
<p>javascript URL还可以含有只执行动作,但不返回值的javascript语句。例如:</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre>1 javascript:alert("hello world!")</pre>
</div>
<p>&nbsp;</p>
<p>装载了这种URL时,浏览器仅执行其中的javascript代码,但由于没有作为新文档来显示的值,因此它并不改变当前显示的文档。</p>
<p>通常我们想用javascript:URL执行某些不改变当前显示的文档的javascript代码。要做到这一点,必须确保URL中的最后一条语句没有返回值。一种方法是用void运算符显式地把返回值指定为underfined,只需要在javascript:URL的结尾使用语句void 0;即可。例如:下面的URL将打开一个新的空浏览器窗口,而不改变当前窗口的内容:</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre>1 javascript:window.open("about:blank"); void 0;</pre>
</div>
<p>&nbsp;</p>
<p>如果这个URL没有void运算符,window.open()方法的返回值将被转换成字符串并被显示出来,当前窗口将被如下所示的文档覆盖。</p>
<p>&nbsp;</p>
<p>来源:https://www.cnblogs.com/lcyuhe/p/6409379.html&nbsp; &nbsp;&nbsp;https://www.cnblogs.com/song-song/p/5277838.html</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/forforever/p/12711197.html
頁: [1]
查看完整版本: javascript伪协议