未捕获的TypeError:无法读取null的addEventListener属性

问题描述 投票:0回答:1

我正在为我的javascript类分配作业,但不断出现错误

fetch_page.js:109未捕获的TypeError:无法读取null的属性'addEventListener'在addEventListeners(fetch_page.js:109)在fetch_page.js:121

我会很诚实,我听不懂javascript的废话,但是我被迫上这门课来获得我的网络管理员学位。谁能指出我在哪里出错?

window.addEventListener('DOMContentLoaded',(function() {
	var contents;
	
	var protocol;
	var hostname;
	var directory;
	var file;
	
	function parseBase() {
		var pos, slashPos;
		var remainder;
		
		pos  = BASE.indexOf('://');
		protocol = BASE.substr(0, pos);
		remainder = BASE.substr(pos +3);
		slashPos = remainder.indexOf('/');
		if (slashPos === -1) {
			hostname = remainder;
			directory = "";
			file = "";
		} else {
			hostname = remainder.substr(0, slashPos);
			remainder = remainder.substr(slashPos +1);
			slashPos = remainder.lastIndexOf('/');
			if (slashPos === -1) {
				directory = "";
				file = remainder;
			} else {
				directory = remainder.substr(0, slashPos);
				file = remainder.substr(slashPos + 1);
			}
	}
	console.log("protocol:", protocol);
	console.log("hostname:", hostname);
	console.log("directory:", directory);
	console.log("file:", file);
	}
	
	function relativeToAbsolute(url) {
		if (url.indexOf('://') > -1) { 	// http://somedomain.com/path/file.html
		return url;
		} else if (url[0] === '/') { // /path/file.html
			return protocol + "://" + hostname + url;
		} else { // path/file.html
		if (directory === "") {
		return protocol + "://" + hostname + "/" + url;
		} else {
			return protocol + "://" + hostname + "/" + directory + "/" + url;
		}
		}
	}
	
	function parsePage() {
		var parser = new DOMParser();
		contents = parser.parseFromString(atob(PAGE), "text/html");
		console.log(contents);
	}
	
	function moveChildren(source, destination) {
		while (source.childNodes.length > 0) {
			var child = source.childNodes[0];
			source.removeChild(child);
			destination.appendChild(child);
	}
	}
	
	function fixTags(tagName, attribute) {
		var tags = contents.getElementsByTagName(tagName);
		
		for (var counter =0; counter < tags.length; counter++) {
			var url = tags[counter].getAttribute(attribute);
			if (url) {
				tags[counter].setAttribute(attribute, relativeToAbsolute(url));
			}
	}
	}
	
	function fixRedirectedTags(tagName, attribute) {
		var tags = contents.getElementsByTagName(tagName);
		
		for (var counter =0; counter < tags.length; counter++) {
			var url = tags[counter].getAttribute(attribute);
			if (url) {
				tags[counter].setAttribute(attribute,
				window.location.origin + window.location.pathname + '?url=' + encodeURIComponent(relativeToAbsolute(url)));
			
			}
	}
	}
	
	function fixURLs() {
		fixTags('img', 'src');
		fixTags('script', 'src');
		fixTags('link', 'href');
		fixRedirectedTags('a', 'href');
	}
	
	function moveContent() {
		moveChildren(contents.head, document.head);
		moveChildren(contents.body, document.getElementById('contents'));
	}
	
	function submit() {
		console.log("submitted:", encodeURIComponent(document.getElementById('urlBox').value));
	}
	
	function addEventListeners() {
		document.getElementById('goButton').addEventListener('click', submit);
		document.getElementById('urlBox').addEventListener('keydown', function(event) {
			if (event.keyCode == 13 || event.keyCode == 10) {
				submit();
			}
		});
	}
	
	return function() {
		parseBase();
		parsePage();
		fixURLs();
		moveContent();
		addEventListeners();
	}
}) ())

<?php
	$url = isset ($_GET['url']) ? $_GET['url'] : "http://eloquentjavascript.net/";
	$contents = base64_encode(mb_convert_encoding(file_get_contents($url), "HTML-ENTITIES","UTF-8"));
	?>
<!doctype html>
<html>
	<head>
		<title>Fetch Page</title>
	<link rel="stylesheet" href="fetch_page.css">
	<script src="fetch_page.js"></script>
	<script>
	var BASE = "<?php echo $url; ?>";
	var PAGE = "<?php echo $contents; ?>";
	</script>
	</head>
	<body>
	<div id="searchBox">Type a URL here: <input type="text" id=urlBox"> <span id="goButton">GO</span></div>
	<div id="tocContainer">
	<div id="toc">[toc goes here]</div>
	<p id="contents">Hello World!</p>
	<div id="contents"></div>
	</body>
	</html>

body {
	margin: 0px;
}
#searchBox {
	background: black;
	color: white;
	width: 100%;
	text-align: center;
	vertical-align: middle;
	padding: 10px;
	}
#goButton {
	background: red;
	color: black;
	padding: 4px
	font-weight: bold;
	font-family: Arial;
	font-size: .75em;
	vertical-align: middle;
	cursor: pointer;
}
#urlBox {
	width: 50%
}
#contents {
	border: 1px solid black;
}
javascript
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.