去除页面中JS调用,谁能拯救?

LG_Coffee 2011-02-17 10:05:32
我现在是通过JQuery的笨方法实现的

如:
$("#div_Preview_Content *").each(function () {
$(this).removeAttr("onblur");
$(this).removeAttr("onclick");
$(this).removeAttr("ondblclick");
$(this).removeAttr("onfocus");
$(this).removeAttr("onkeydown");
$(this).removeAttr("onkeypress");
$(this).removeAttr("onkeyup");
$(this).removeAttr("onmousedown");
$(this).removeAttr("onmouseout");
$(this).removeAttr("onmousemove");
$(this).removeAttr("onmouseover");
$(this).removeAttr("onmouseup");
});

但是这样的实现方式,性能明显达不到要求

谁能提供更好的实现或思路吗?
...全文
374 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
boringame 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 lg_coffee 的回复:]
引用 12 楼 boringame 的回复:
性能不行吗?

我觉得这个性能应该没什么问题。

那就不要用jqeury。直接用js写。

//类似这样写:
便利div_Preview_Content的所有子元素

div_Preview_Content.onclick=null;
div_Preview_Content.onxxxx=null;

我现在是通过JQuery……
[/Quote]

有这么多哦吗?

就算有效率也不会有很大问题。

几百几千对计算机来说根本没感觉才对的。

你应该确认一下,效率的瓶颈是不是因为这个。


建议如果是对页面上的所有控件的话,可以用

for(var i=0;i<body.all.length;i++){
}

这样遍历效率会比较高。

问题的保姆,帖子的管家——《Csdn收音机》!
LG_Coffee 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 boringame 的回复:]
性能不行吗?

我觉得这个性能应该没什么问题。

那就不要用jqeury。直接用js写。

//类似这样写:
便利div_Preview_Content的所有子元素

div_Preview_Content.onclick=null;
div_Preview_Content.onxxxx=null;
[/Quote]
我现在是通过JQuery的笨方法实现的

如:
$("#div_Preview_Content *").each(function(){});
这里迭代的是一个页面的所有标签
随便也有几百上千吧
boringame 2011-02-17
  • 打赏
  • 举报
回复
性能不行吗?

我觉得这个性能应该没什么问题。


那就不要用jqeury。直接用js写。

//类似这样写:
便利div_Preview_Content的所有子元素

div_Preview_Content.onclick=null;
div_Preview_Content.onxxxx=null;

....

回答问题要查资料?用《Csdn收音机》可以最快速度搞定!
LG_Coffee 2011-02-17
  • 打赏
  • 举报
回复
需求这回事儿,不是我们说了算的,你懂的!
KK3K2005 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lg_coffee 的回复:]

先感谢6楼

虽然你的法子可解燃眉之急

但多少有点旁门左道的感觉

这样页面的安全性也会降低吧
[/Quote]

您的需求本来就是不正规的
LG_Coffee 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 personball 的回复:]
lz的需求真的蛮奇怪- -,你要么干脆写个程序处理请求返回的字符串好了。。。把所有关键字属性和值都去除再重新生成页面。。
[/Quote]

仅去除标签中JS调用的属性和值,其他要保留
personball 2011-02-17
  • 打赏
  • 举报
回复
lz的需求真的蛮奇怪- -,你要么干脆写个程序处理请求返回的字符串好了。。。把所有关键字属性和值都去除再重新生成页面。。
LG_Coffee 2011-02-17
  • 打赏
  • 举报
回复
先感谢6楼

虽然你的法子可解燃眉之急

但多少有点旁门左道的感觉

这样页面的安全性也会降低吧
KK3K2005 2011-02-17
  • 打赏
  • 举报
回复
<script>
window.onerror=function(ex){
//alert('myex:'+ex);
return true;
}
</script>
在开始加这样个js看看
LG_Coffee 2011-02-17
  • 打赏
  • 举报
回复
汗...关键是要处理的页面不是我写的

需求:
1.通过URL获取指定页面源文件的 HTML 字符串(已实现)
2.去除HTML字符串中的所有JS脚本(已实现)和JS调用(已实现,但是速度不理想),此步骤为了第3步
3.正确的在自己的页面的指定层中展示

就是这样...继续等...
MrSLin 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lg_coffee 的回复:]

我想我没把需求说的太清楚

情况是这样的,页面中的script脚本已经移除了

但是在标签里面的调用还在

这样触发JS就会因为找不到脚本而报错

我现在就是要去掉所有的JS
[/Quote]
那你写页面的时候,在标签里面就不要写onclick等事件函数。
如果你是使用添加事件监听attachEvent\addEventListener,那么你移除脚本就remove一下事件。
LG_Coffee 2011-02-17
  • 打赏
  • 举报
回复
我想我没把需求说的太清楚

情况是这样的,页面中的script脚本已经移除了

但是在标签里面的调用还在

这样触发JS就会因为找不到脚本而报错

我现在就是要去掉所有的JS
灬上海爽爷 2011-02-17
  • 打赏
  • 举报
回复
嗯。匹配所有的<script和</script>
两边加上注释代码
这样就算调用也找不到函数了吧。
yhtapmys 2011-02-17
  • 打赏
  • 举报
回复
奇怪的需求

把页面的所有script都移除不就得了?

或者新建文件夹,里面放定制的script,
然后页面指过去
LG_Coffee 2011-02-17
  • 打赏
  • 举报
回复
感谢 theforever

你刚刚所提到的两点是我没考虑清楚的

受教了
  • 打赏
  • 举报
回复
by theforever_csdn:

"removeAttr本身只支持单独的属性,那就换换,用attr,它可以一次操作多个属性,明白了吧。"

这是从反角度,不删除属性,而是通过重设属性取消原来的设置。

从大批量操作的细微感觉上说,重设其实应该比删除快。

这种测试,楼主自己试试,然后说说结果吧,我还真没尝试,只是猜测吧。

当然,真要提升性能,还得用原生JS,并注意我上面说的两点,一是捕获最好的特征来更精确处理范围,二是尝试用重设代替删除。
  • 打赏
  • 举报
回复
楼主说要处理的有上千个,数量的确不少,虽然现在软硬件能力有很大提高,但从程序角度,总是应该从项目的情况综合考虑应采用什么方法更优化。

所以最好把这个事情的背景和要处理的内容细节交待详细一些。
  • 打赏
  • 举报
回复
by theforever_csdn:

楼主象是在做一个浏览器插件或类似的东西。

如果仅仅是处理这个问题,还是不用JQ得好,用原生的JS。

不过,即使是用JQ,这个也有优化的空间:

$("#div_Preview_Content *").each()
这个应该尝试更精确点,确保div_Preview_Content *里面没有太多不需要处理的内容。

removeAttr罗列使用次数过多了,这种情况下也会影响性能,应使用属性列表的方法进行操作。而removeAttr本身只支持单独的属性,那就换换,用attr,它可以一次操作多个属性,明白了吧。
LG_Coffee 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 redorange2004 的回复:]
LZ你是想做打印预览吗?
如果是的话,就把前面覆盖一个透明div就可以了。让鼠标无法作用。
需要注意的是,在IE里,没有内容的DIV是不能覆盖内容的,需要设置透明滤镜。
[/Quote]

类似有道搜索的预览功能

所以除了JS,其他的链接都还是要的,不可以禁用
加载更多回复(2)

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧