如何像CSS修饰元素那样,直接禁用废除某个元素?(比如audio元素不去访问音频文件)

Web、Mail、Ftp、DNS、Proxy、VPN、Samba、LDAP 等基础网络服务
回复
头像
AutoXBC
帖子: 1744
注册时间: 2007-10-23 12:54

Re: 如何像CSS修饰元素那样,直接禁用废除某个元素?(比如audio元素不去访问音频文件)

#2

帖子 AutoXBC »

如果不能编译浏览器修改源码,那一般只能通过用户脚本(user js)进行设置,不同浏览器对用户脚本的支持度不同,能达成的效果也有很大差异。

彻底禁用某一标签,可以将其删除,用 removeChild 方法,或者将其转化为无对应行为的标签。仅仅修改某个标签的行为,可以寻找对应行为在 js 语言中对应的事件,修改事件行为。

audio元素不去访问音频文件比较笼统,看不出你的实际目的,给出代码比较困难。比如我一般会把 HTML5 的 Video 元素转化为 embed 元素,加载我自己的 flash 播放器,以此来解决 Opera 浏览器对 H.264 支持不佳的问题,具体代码稍长有几百行,不过稍懂 js 就能上手。
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: 如何像CSS修饰元素那样,直接禁用废除某个元素?(比如audio元素不去访问音频文件)

#3

帖子 科学之子 »

AutoXBC 写了:如果不能编译浏览器修改源码,那一般只能通过用户脚本(user js)进行设置,不同浏览器对用户脚本的支持度不同,能达成的效果也有很大差异。

彻底禁用某一标签,可以将其删除,用 removeChild 方法,或者将其转化为无对应行为的标签。仅仅修改某个标签的行为,可以寻找对应行为在 js 语言中对应的事件,修改事件行为。

audio元素不去访问音频文件比较笼统,看不出你的实际目的,给出代码比较困难。比如我一般会把 HTML5 的 Video 元素转化为 embed 元素,加载我自己的 flash 播放器,以此来解决 Opera 浏览器对 H.264 支持不佳的问题,具体代码稍长有几百行,不过稍懂 js 就能上手。
"彻底禁用某一标签,可以将其删除"
基本上就是我想要的"实际效果"
"实际目的"是有些时候不需要播放音频文件,所以想禁用掉那些元素,避免无意义的随机读取压力
头像
AutoXBC
帖子: 1744
注册时间: 2007-10-23 12:54

Re: 如何像CSS修饰元素那样,直接禁用废除某个元素?(比如audio元素不去访问音频文件)

#4

帖子 AutoXBC »

如果浏览器提供按需加载,那要比完全删除标签好一些,在需要时还可以播放。

如果确实要删除标签,可以用这样的代码

代码: 全选

['DOMNodeInserted','DOMContentLoaded'].forEach(function(str){
	window.addEventListener( str , function (evt) {
		var target = evt.target ;
		var tag2rm = 'audio' ;
		
		if(target.tagName && target.tagName.toLowerCase() == tag2rm )
			target.parentNode.removeChild(target);
		else {
			if(target.querySelectorAll)
			{
				var ndlst = target.querySelectorAll(tag2rm) ;
				Array.prototype.slice.call(ndlst).forEach(function(nd){
					nd.parentNode.removeChild(nd);
				});
			}
		}	
	});
});
大概意思是这样,未经严格调试。具体怎么在你的浏览器里加载这个代码,可以搜索用户脚本的用法。
回复