是否有JavaScript脚本加载每个html文件的内容?如果是这样,你有JavaScript代码来运行一次每个文件被加载,你可以调用加载函数内所需的设置功能是这样的:
base.html文件
<html>
<head>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/pageA.js"></script>
<script type="text/javascript" src="js/pageB.js"></script>
<script type="text/javascript">
$(document).ready(function()
{
$('#loadPageA').on('click', function()
{
$('#contents').load('pageA.html', function()
{
setupPageA(); // defined in pageA.js
});
});
$('#loadPageB').on('click', function()
{
$('#contents').load('pageB.html', function()
{
setupPageB(); // defined in pageB.js
});
});
});
</script>
</head>
<body>
<div id="contents"></div>
<a id="loadPageA">Load Page A</a>
<a id="loadPageB">Load Page B</a>
</body>
<html>
或者,你如果只是想当将pageA.html在你被加载运行pageA.js可以只包括在页面中的pageA.js脚本元素将pageA.html本身,就像这样:
将pageA.html:
<div id="pageAContent">Page A</div>
<script type="text/javascript src="js/pageA.js"></script>
pageB.html:
<div id="pageBContent">Page B</div>
<script type="text/javascript src="js/pageB.js"></script>
base.html文件:
<html>
<head>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function()
{
$('#loadPageA').on('click', function()
{
$('#contents').load('pageA.html');
});
$('#loadPageB').on('click', function()
{
$('#contents').load('pageB.html');
});
});
</script>
</head>
<body>
<div id="contents"></div>
<a id="loadPageA">Load Page A</a>
<a id="loadPageB">Load Page B</a>
</body>
<html>
动态脚本的src溶液:
base.html文件:
<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
function loadScript(script)
{
// Modify the existing script tag
if($('#dynamicScriptTag').length != 0)
{
$('#dynamicScriptTag').attr('src', script);
}
else // Create script tag
{
$('<script>').attr('type', 'text/javascript')
.attr('src', script)
.attr('id', 'dynamicScriptTag')
.appendTo('head');
}
}
$(document).ready(function()
{
$('#loadPageA').on('click', function(event)
{
event.preventDefault();
$('#contents').load('pageA.html', function()
{
loadScript('js/scriptA.js');
testScriptB(); // test if we can still call a function in scriptB.js
});
});
$('#loadPageB').on('click', function(event)
{
event.preventDefault();
$('#contents').load('pageB.html', function()
{
loadScript('js/scriptB.js')
testScriptA(); // test if we can still call a function in scriptA.js
});
});
});
</script>
</head>
<body>
<div id="contents"></div>
<a id="loadPageA" href="#">Load Page A</a>
<a id="loadPageB" href="#">Load Page B</a>
</body>
</html>
pageA.html中:
<div id="pageAContents">Page A</div>
pageB.html:
<div id="pageBContents">Page B</div>
JS/SCRIPTA。JS:
console.log($('#pageAContents').text());
function testScriptA(){ console.log('Can still call testScriptA!'); }
JS/scriptB.js:
console.log($('#pageBContents').text());
function testScriptB(){ console.log('Can still call testScriptB!'); }
这种方法唯一的问题是您必须记住在每次更改后清理脚本元素。如果您遇到有人加载页面A,然后加载页面B,再加载页面A的情况,则可能导致冲突。但是,如果做得对,一个非常好的主意! – SimonDever 2013-04-22 04:11:51
@Ambrosia +1,好点。但是请注意,我的第一种方法与您的第一种方法相同(在每个html的末尾添加脚本标签),第二种方法考虑到页面将重新加载,但如果URL更改(没有完全重新加载),是的,可以是一个大问题... – NemoStein 2013-04-22 04:26:20
啊,是的,你要做一个完整的重新加载运行。我想这会避免冲突。另外值得注意的是,我认为你必须等到DOM完全加载完成之后才能对'
'标签中的内容进行更改,以便您可以将它包装在'$(document).ready(function( ){});'块。如果通过更改src(在DOM加载之后)删除脚本,它是否会从浏览器的内存中删除这些功能,或者是否仍然存在冲突?我可能会尝试编写另一个动态脚本转换器来测试它。 – SimonDever 2013-04-22 04:33:17