如何在博客园的文章/随笔中添加可运行的js代码

 在博客园浏览大牛们写的文章时,经常会看到在文章中混有一些可运行示例,例如司徒正美的博客中:

带有可运行示例

可以点击“运行代码”

  经过一番小小的探索,掌握了这种写博技巧,希望大家也借鉴大牛们的写法,让我们的博客更有表现力~开始~

一、博客中带有可运行javascript示例

  很显然,作者是写了js代码在文章里面了,方法也比较简单,进入后台编辑器的源码编辑模式,在里面直接敲<script>标签,把代码放进去就可以了。同理,也可以敲<style>标签写css代码。保存后,看你的文章,已经可以有“功能”了。我之前也以为这样就OK了,挺方便的嘛!谁知过几天后再访问,发现js失效了!F12查看我的代码,<script>没有了!肯定是博客园进行过滤了。进入后台再更新一下源码,发现又可以生效了,但是过几天后就又失效了。带着疑惑我给博客园技术团队发了封邮件询问,谁知结果非常简单,请看截图:

  

  真晕!所以结论是:要想在文章中使用js代码,请先联系管理员开通权限。

二、点击“运行代码”,在新页面运行文本框中的代码

  这个就稍微有点技术含量了。我之前一直以为是博客园有什么插件提供,后来发现压根没有,这个功能得自己用代码写。基本步骤是这样的:

  ①写好HTML代码

  ②转义,放在textarea中

  ③点击“运行代码”,创建新窗口。var win = window.open();

  ④获取textarea中的代码,反转义,放到win中。win.document.write(html);

  这样就可以在新窗口中运行你的代码了。这中间需要转义和反转义HTML代码,相关的函数如下:

//转义
var REGX_HTML_ENCODE = /"|&|'|<|>|[\x00-\x20]|[\x7F-\xFF]|[\u0100-\u2700]/g;
var encodeHtml = function(s){
return (typeof s != "string") ? s :
s.replace(REGX_HTML_ENCODE,
function($0){
var c = $0.charCodeAt(0), r = ["&#"];
c = (c == 0x20) ? 0xA0 : c;
r.push(c); r.push(";");
return r.join("");
});
}; //反转义
var REGX_HTML_DECODE = /&\w+;|&#(\d+);/g;
var HTML_DECODE = {
"&lt;" : "<",
"&gt;" : ">",
"&amp;" : "&",
"&nbsp;": " ",
"&quot;": "\"",
"&copy;": "©" // Add more
};
var decodeHtml = function(s){
return (typeof s != "string") ? s :
s.replace(REGX_HTML_DECODE,
function($0,$1){
var c = HTML_DECODE[$0]; // 尝试查表
if(c === undefined){
// Maybe is Entity Number
if(!isNaN($1)){
c = String.fromCharCode(($1 == 160) ? 32 : $1);
}else{
// Not Entity Number
c = $0;
}
}
return c;
});
};

  需要的东西就这些了,来试一下:

  怎么样?是不是感觉瞬间高端洋气了呢~看着虽简单,这可是我鼓捣了半天那个编辑器才试成功的,这里不得不吐槽一下博客园的编辑器,太不好用了!而且还有一个重要问题:<script>标签无法被转义,如果代码中含有<script>,转义的时候总是出错,猜测是博客园对script进行的特殊处理。所以,若代码中含有<script>标签,只能自己手动“转义了”,即把<换成&lt;把>换成&gt;并且,把所有手动转义后的代码先写在textarea中。看看我在后台是如何写的吧:

<textarea class="runcode" style="width: 90%; height: 100px;">&lt;script type="text/javascript"&gt;alert(document.getElementsByTagName("li")[0].innerHTML);&lt;/script&gt;
</textarea>
<script type="text/javascript">
var REGX_HTML_ENCODE = /"|&|'|<|>|[\x00-\x20]|[\x7F-\xFF]|[\u0100-\u2700]/g;
var encodeHtml = function(s){
return (typeof s != "string") ? s :
s.replace(REGX_HTML_ENCODE,
function($0){
var c = $0.charCodeAt(0), r = ["&#"];
c = (c == 0x20) ? 0xA0 : c;
r.push(c); r.push(";");
return r.join("");
});
};
var REGX_HTML_DECODE = /&\w+;|&#(\d+);/g;
var HTML_DECODE = {
"&lt;" : "<",
"&gt;" : ">",
"&amp;" : "&",
"&nbsp;": " ",
"&quot;": "\"",
"&copy;": "©"
};
var decodeHtml = function(s){
return (typeof s != "string") ? s :
s.replace(REGX_HTML_DECODE,
function($0,$1){
var c = HTML_DECODE[$0]; // 尝试查表
if(c === undefined){
// Maybe is Entity Number
if(!isNaN($1)){
c = String.fromCharCode(($1 == 160) ? 32 : $1);
}else{
// Not Entity Number
c = $0;
}
}
return c;
});
};
var html = encodeHtml('<ol><li>测试的内容</li><li>测试的内容</li><li>测试的内容</li><li>测试的内容</li></ol>');
$('.runcode').prepend(html);
function runcode(){ var win = window.open(); win.document.write(decodeHtml($('.runcode').html())); }
</script>

  没有想到别的办法,目前只能这么处理了。若大家有好的方法,欢迎告知哦~

  好了,就这些内容了,小伙伴们,快来试试吧~

添加可运行的js代码的更多相关文章

  1. 如何在文章/随笔中添加可运行的js代码

    <script type="text/javascript"> alert("你知道我是怎么弹出的吗?"); </script> 看大神 ...

  2. 可运行的js代码

    canrun <html> <head> <title>测试博客园HTML源码运行程序</title> <meta http-equiv=&quo ...

  3. 表单添加缩略图及截图js代码

    此为表单提交是上传截图的代码,待优化: // 添加小程序图片 function addAvatar(obj){ var file = obj.files[0]; limit($('.avatar_bo ...

  4. 兼容IE,Firefox,Opera等浏览器的添加到收藏夹js代码实现

    function AddToFavorites() { var title = document.title; var url = location.href; if (window.sidebar) ...

  5. 一行js代码识别Selenium+Webdriver及其应对方案

    有不少朋友在开发爬虫的过程中喜欢使用Selenium + Chromedriver,以为这样就能做到不被网站的反爬虫机制发现. 先不说淘宝这种基于用户行为的反爬虫策略,仅仅是一个普通的小网站,使用一行 ...

  6. javascript--给你的JS代码添加单元测试

    通过测试框架为JavaScript应用添加测试,从而保证代码的高质量.这里的笔记例子应用在jaywcjlove/validator.js中. 安装 用到三个工具chai(断言工具),mocha(测试框 ...

  7. 网页中嵌入可以点击“运行代码”执行html/css/js代码

    html代码 <textarea name="textarea" cols="60" rows="10" id="rn01& ...

  8. Yii2的View中JS代码添加

    直接写 <script> $(function(){ alert("aaa"); }); <script> 会提示出错 是因为view中添加js代码的前面没 ...

  9. 原创:js代码, 让dedecms支持Tag选择, 添加内容更为方便,不用手输Tag

    dedecms在编辑修改内容时,TAG标签需要手动输,中文的Tag, 中间还得用半角字符','分隔,  输入法切来切去很不方便,   于是动手改后台代码, 利用后台的tags_main.php, 让d ...

随机推荐

  1. 栈 & 堆 |--> 内存管理

    内存管理: 栈区 [stack]:由编译器自动分配并释放,一般存放函数的参数值,局部变量等 堆区 [heap]:由程序员分配和释放,如果程序员不释放,程序结束时,可能会由操作系统回收 全局区(静态区) ...

  2. Socket 学习(三).1 tcp 通讯

    实现了,局域网客户端 对客户端 的通讯. 实际上这是 一个 客户端 兼 服务端 . 2个阿里云服务器测试 效果图: 本地效果图: using System; using System.Collecti ...

  3. MVC5+EF6 入门

    MVC5+EF6 入门完整教程九   前一阵子临时有事,这篇文章发布间隔比较长,我们先回顾下之前的内容,每篇文章用一句话总结重点. 文章一 MVC核心概念简介,一个基本MVC项目结构 文章二 通过开发 ...

  4. 图片alpha blending的计算

    转载时请注明出处和作者联系方式:http://blog.csdn.net/mimepp作者联系方式:YU TAO <yut616 at sohu dot com> 一幅彩色图像的每一个像素 ...

  5. hdu5024(dp)

    意甲冠军: 薛期呵和王熙凤不想很接近生活(因为假定他们一起,柴可能取代王熙凤) 现在'.'事情是这样的.'#'一堵墙.薛期呵对宝让生活远: 因此,选择一个最长的公路,让他们住在两端: 路达一个转折点. ...

  6. NHibernate中使用memcache二级缓存

    在NHibernate中使用memcache二级缓存 一.Windows下安装Memcache  1. 下载   http://jehiah.cz/projects/memcached-win32/  ...

  7. FluentMigrator

    开源DataBase组件:FluentMigrator 2012-05-27 19:09 by 破狼, 2211 阅读, 4 评论, 收藏, 编辑 今天将介绍一款开源组件FluentMigrator, ...

  8. MySQL之自定义函数

    引言 MySQL本身提供了内置函数,这些函数的存在给我们日常的开发和数据操作带来了很大的便利,比如我前面提到过的聚合函数SUM().AVG()以及日期时间函数等等,可是我们总会出现其他的需求:我们需要 ...

  9. 折腾源WRT的AC路无线路由-2

    在创纪录的开箱图,开箱后,我觉得大尺寸,因此,获得一些各种尺寸,喜欢网上购物的参考.也许这,安装后,它占用的大小:基本长度=28.5cm.深度=19.5cm,高=19.5,因为制造商推荐的约两个天线是 ...

  10. 解决easyui datagrid load时缓存问题

    修改easyui datagrid内容保存后,使用$("#dg").datagrid("reload");或者$("#dg").datagr ...