标签:依次 com 个人 存在 字符串 rip .com blog 定义
Conmajia
January 19, 2019
document.title = "[我是 js 生成的!] " + document.title
警告 这是试验性的尝试,不要用它做多余的事,小心玩脱了。
这篇文章的标题其实是有点问题的,会让人觉得我在搞破坏,找漏洞。NONONO,这是误会。
实际上,这种担心是不存在的。博客园本身并没有屏蔽 javascript 脚本,甚至还在后台主动开放了 HTML 权限,作为博客网站而言,是比较良心的。现在改用了 Markdown 编辑器,再加上支持文章正文内插入 HTML,整个博客的可玩性更高了。
毕竟它压根儿就没有扩展功能的插件和可编辑的主题,再不开放权限还玩您 个蛋呢?
只是总有人不小心或者很小心地搞出一些事来,为了网站安全,不得不屏蔽掉文章里的 <script>
标签。
所以现在你如果在文章里写上 js,它没法运行。如果做试验,你写:
<!-- 前面的正文 -->
<script type="text/javascript">
document.title = Math.random()
</script>
<!-- 后面的正文 -->
然后发文章发表出来,你会发现这段压根儿就不显示、不执行,烟儿似的就消失了,屁反应没有。
那怎么办啊,就没招改改默认主题了吗?好些人说,
默认主题也挺好的啊,还有那么多五颜六色的可以选呢。
您是认真的吗?啊?默认的那些主题实在是太难看了啊,难道这就是传说中的程序员的审美观么?9021 年了,醒醒,大清已经亡了!村里通网多少年了,Web 都已经 4.0,5.0,6.0 了,老铁!
如果某天你意识到了这一点,精通增删改查的你也许会想要给自己的博客整个容?加点料?删点自带的垃圾?在读者打开你每篇文章时都跳出点不同的东西?
你知道我在说什么,毕竟你那么聪明。
都已经开放 HTML 了,你当然可以用各种姿势咯美化界面咯,我这个博客就有很多东西是代码生成的。还有一个好处是增强了文章的互动性,提高读者参与度。比如你要讲随机数,编了无数代码,写得是天花乱坠,读者看得是晕头转向:
Math.random()
吧啦吧啦逼逼半天,能有我一个按钮的效果好?
所以现在我来说说怎么运行文章正文里的 js 代码。你知道的,js 有一个 eval
函数专门 evaluate 字符串形式的 js 语句。那么,嘻嘻,look at 管理→设置
自定义 HTML 的地方:
非常幸运,eval
函数可以执行,这就简单至极了。既然正文里的 <script>
屏蔽了,改从外围执行代码就好啦。在正文里用一个标签 <run>
包住要执行的代码,直接 eval
:
<!-- 页面底部 HTML 设置 -->
<script>
$(function(){
$('run').each(function(){eval($(this).text())});
});
</script>
这样,页面载入完后,就会依次执行正文里所有 <run>
标签内的代码了。把一开始那个例子改改,文章里写上:
<!-- 前面的正文 -->
<run>
document.title = Math.random()
</run>
<!-- 后面的正文 -->
发表文章就能看到效果了(↑↑ 你再看看本文的标题栏?):
这不就绕过屏蔽了?美观一点,可以把所有 <run>
都隐藏起来:
/* CSS 设置 */
run {
display: none;
}
需要说明的是,这并不是 bug,最多算留出了非常大的自由度。至于怎么使用,还是得看个人素质了。
我强烈怀疑有些重要的语句是无法执行的,不过我没有试过,我也不知道事实如何。
The End. \(\Box\)
标签:依次 com 个人 存在 字符串 rip .com blog 定义
原文地址:https://www.cnblogs.com/conmajia/p/bypass-script-blocking.html