JS中操作对dom树的影响

本文探讨了JavaScript尝试调用Java Applet中不存在字段的情况,并对比了不同浏览器(如IE与FF)处理该问题的不同行为。此外,还讨论了使用document.write()函数可能带来的页面重写问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<html>
	<body onload="invokeUnExistField()">	
		<h1>JS try to call a nonexistent field in Java Applet.</br>
		We Expect that the JS will throw an Exception.</br>
		Read the console for more info.</h1>
		

		<APPLET NAME="MyApplet" WIDTH="210" HEIGHT="300" CODE="ExceptionTest.class" CODEBASE=".">
		
		</APPLET>

		<script language="JavaScript">
			var invokeUnExistField = function(){

				try{
				var testApplet = document.MyApplet;
				document.write("num is ");
				testApplet.writeToConsole("num is " + testApplet.max);
				
					
				}catch(e){
					document.write("something is wrong! " + e);
				}
			}
		</script>

	</body>
</html>

在上面的代码中,请关注蓝色这几点。

1 首先代码加载完成后,会调用invokeUnExistField().并且是在body上面进行调用的。

2 然后会打印“num is”在整个页面的顶端。(貌似不论在哪个标签里面调用包含document.write函数都会将整个页面重写,难道是因为不知道写在哪?

3 这样的话,整个的dom貌似就被改写了,里面的各种标签啊,各种对象啊,都消失了。(这里有一点需要注意就是IE和FF在处理JS时候对Applet对象的区别)

比如IE在遇到打印了num is之后,会利用打印出来的东西重新生成dom树。但是要继续执行JS啊,就是上面提到的invokeUnExistField()。在IE中这个时候Applet对象就会消失,虽然其他内部JS对象仍然存在,知道JS执行完毕。在调用就不存在了。
然而在FF中,虽然重新打印了页面,内部dom树已经被更改,此时上次的调用Applet对象还是存在的,仍然可以调用。

4 页面中的dom树貌似就变为很原生的,其他就没有什么东西了甚至js等等的东西都没有了(js不确定,有待进一步考证)。但可以确定的是基本的对象就挂了。

<html>
<body>
num is
</body>
</html>

Warning:Try to avoid using document.write() in real life JavaScript code. The entire HTML page will be overwritten if document.write() is used inside a function, or after the page is loaded. However, document.write() is an easy way to demonstrate JavaScript output in a tutorial.

待续。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值