文章标签 » javascript

替换js中的字符串常量为变量

最近需要把整站js中的域名替成变量,awk查资料写了大半天也没整出个啥,话说我的正则还是太初级,话说我买的正则书也不知跑到哪去了,话说好书还是要放到家里

于是还是用python,没有用正则,但是好像跑起来真的比awk快~

脚本下载:replace_keyword.zip

效果:

//替换之前
var s = '';
//替换之后
var s = '';

使用方法:
首要要修改脚本里要替换的关键词

config['keyword'] = 'abc.com'
config['vname'] = 'siteDomain'

然后

python replace_keyword.py ./myscript.js > /tmp/ooxx
mv /tmp/ooxx ./myscript.js

批量替换的话就需要写个简单的shell:replace_keyword.sh

#!/bin/sh
python replace_keyword.py $1 > /tmp/ooxx
mv /tmp/ooxx $1

批量替换整个目录

find ./ -name "*.js" | xargs -i sh replace_keyword.sh {}

最后任务远没有结束,这个脚本还不够强大,它只会替换字符串中的关键字,作为对象属性名称的字符串不会替换,正则中的关键字无法替换,像下面:

var config = {
    'blog.abc.com' : 1,
    'game.abc.com' : 2
}
//需要手工替换为
var config = {};
config['blog' + siteDomain] = 1;
config['game' + siteDomain] = 2;

if ( /abc\.com/.test(str) ){}
//需要手工替换为
if ( new RegExp( siteDomain.replace('.','\.') ).test(str) ){}

所以运行完脚本之后还需要检查未替换的地方,手工完成

find ./ -name "*.js" | xargs grep 'abc\\\?\.com'

@¥竟然能使ie6的文字链接神奇变形。。

更新:
sonic同学发现了bug的起因:
只要a标签的innerHTML是以http[s]://开头或者包含”@xx”类似email的字符串就会出现这种情况。。
———————————————-
今天qa发现的巨灵异的bug
———————————————-
由于网站域名切换,有些老的数据无法短时间切换,所以打算用js替换。具体实现:当鼠标移到link上时判断是否是老域名,如果是则替换~
代码类似下面

https://bluehua.org/demo/href+@.html

这段代码在除了ie6的浏览器都是正常的,鼠标移上时两个link的href都变成http://oo.test,但是ie6下第一个link出问题了:鼠标上去,链接文字没了。

“@¥”这两个字正好是qa组leader的id后缀,真牛x~

执行ajax返回代码中的脚本,支持document.write

恩,有个产品要速度改版,改用ajax实现分页,可是页面中有很多内联脚本,求技术改比较慢,于是采用了最速都的方法:返回内容之后,把html塞到对应的层里,然后手动eval一下脚本。

这里有点小困难的就是脚本里面有document.write…。不过李宁叔叔说过…

demo:
支持返回代码中的内联或者外联的脚本
https://bluehua.org/demo/eval_inner_html/

原理是这样滴:
执行这些代码之前先把document.write改成自己的函数,用来收集输出的字符串

var _write = document.write;
        
document.write = function( str )
{
    _inner_js.push( str );
}       

执行返回html中的脚本之后将document.write输出的代码添加到script标签的位置

var tmp = document.createDocumentFragment();
appendHTML( tmp,  _inner_js.join( '' ) );
s.parentNode.insertBefore( tmp, s );

ie下的默认回车提交之强大…

ie下如果您在text输入框按回车就会默认将表单提交,可是俺万万没有想到,竟然强大到连submit的onclick事件都能触发了…

示例1:input外面有form标签,输入框按回车会提交表单



示例2:input外面没有form标签,输入框按回车会触发submit的onclick事件







ajax提交流行的今天,form标签往往直接被省略,所以这个特性很可能造成用户在某个输入框按了回车,然后某处一个不相关的button被ie点了一下….

tinyMCE:ie下无法自动转换粘贴文本中的相对路径

一般来说如果我从http://abc.com/about.html把下面一段带有相对路径的文字粘贴到一个富文本编辑器

xxhelp

应当自动转换为如下形式

xxhelp

这样里面的相对路径链接才不会失效,但是发现tinyMCE在ie下面却不会自动转换。以为其他网站也会这样,但是试了一下sina博客的编辑器却没有这个问题,看来应该是tinyMCE本身的问题。

查了许久,发现tinyMCE即使不传document_base_url这个参数也会自作聪明的加一个<base />标签,而href的值就是当前路径。从而导致ie不再自动转换粘贴内容里的相对路径,所以只要删除这个元素便可解决问题,hack如下:

(function()
{
    tinymce.create('tinymce.plugins.bluePatch', {
    
        init : function( ed, url )
        {
            ed.onInit.add( function( ed, cm)
            {
                var b = ed.getDoc().getElementsByTagName( 'base' )[ 0 ];
                //发现直接删除会出问题,所以删除href就够了
                b.removeAttribute( 'href' );
            });
        }
    });

    tinymce.PluginManager.add( 'bluePatch', tinymce.plugins.bluePatch );
})();