我有一个页面可以执行以下操作:
浏览器加载一个非常简单的页面,其中包含有效的头部和正文,只有一个脚本/ noscript对作为内容。
在正文中,它有一个运行函数onLoad的脚本(脚本a)。该函数动态地包含第二个脚本(脚本b),并在其可用时运行其中的函数。
第二个脚本是一个完成各种工作的.js文件。
这两个脚本都由PHP解析并使用application / x-javascript内容类型。
现在,除了几个JS打嗝之外,我的所有工作都很好。 JavaScript不是我强大的语言之一,所以我希望这些是简单的问题,有人可以指出我正确的方向。
问题1:如果我做了一个简单的警报('你在脚本b'中);在第二个脚本中,它按预期工作。但是,如果我做了其他任何事情,它工作正常,然后浏览器会一直指示它正在加载。这是firefox中的补间颜色,或IE中的旋转东西。
我试过以不同的方式结束脚本,似乎没有任何帮助。任何想法如何向浏览器指示脚本是否一直加载?它是一个强制通过PHP解析的.js文件。
问题2: Opera或Google Chrome中似乎根本没有包含第二个脚本。在FF / IE中正常工作,除了加载问题。任何人都可以看到我是否使用了与第二个脚本加载不兼容的东西?
谢谢!
更新
感谢您的回答。我实际上有萤火虫,这就是为什么我知道一切正常(至少在FF中)。我实际上并不知道脚本在Opera / Chrome中不起作用,但没有任何反应。
这是相当多的代码= o)我将从firebug中复制出实际的响应并发布这些响应,以便您可以准确地看到代码是什么。至于关闭连接的网络服务器,我也在想,但如果我将脚本b变成警报('无论'),这似乎很奇怪;它会提醒然后停止加载,但它我完全相同,但是制作脚本document.write('whatever);它将永远加载。
以下是直接从firebug的网络标签中更新,复制的脚本:
请注意,discoverfire.net是一个内部域名,因此您无法从那里加载任何内容......
初始HTML页面:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Welcome!</title>
<style>body { font-family:arial; }</style>
<script language="JavaScript" type="text/javascript" src="http://www.discoverfire.net/analytics/l/a.js">
</script>
<script language="JavaScript" type="text/javascript">
document.onload = Start();
function Start(){
TAFKing_version = '1.0';
TAFKing_lkey = '19-8O-KKA8HV';
TAFKing_Lander();
}
</script>
</head>
<body>
<noscript>
Oops! We can't forward you properly because your JavaScript is turned off.<br /><br />
<a href='http://www.discoverfire.net/analytics/l/noscript/19-8O-KKA8HV.html'>Please click here to continue.</a>
<img src='http://www.discoverfire.net/analytics/l/imp/19-8O-KKA8HV.png' border='0' alt='tell a friend' />
</noscript>
</body>
</html>
**脚本A(... a.js):http://www.discoverfire.net/analytics/l/a.js **
function TAFKing_Lander(){
version = TAFKing_version;
lkey = TAFKing_lkey;
var scrb = document.createElement('script');
scrb.type = 'text/javascript';
scrb.src = 'http://www.discoverfire.net/analytics/l/b.js?lkey='+lkey+'&version='+version+'&cb=4eohe8e65'
;
document.getElementsByTagName('head')[0].appendChild(scrb);
Interval = setInterval("Waiter()", 10);
return;
}
function Waiter(){
if(window.TAFKing_LanderB) {
clearInterval(Interval);
TAFKing_LanderB();
}
}
脚本B(... b.js):http://www.discoverfire.net/analytics/l/b.js?lkey=19-8O-KKA8HV&version=1.0&cb=4eohe8e65
function TAFKing_LanderB(){
document.write("there are just a whole bunch of doc.writes here that build a simple table");
}
答案 0 :(得分:2)
我敢打赌它与脚本无关,而是与网络服务器有关。您的描述,特别是它影响许多浏览器,其中一些甚至不运行脚本,让我相信网络服务器没有关闭连接。也许网络服务器没有正确处理HTTP / 1.1保持活动请求。
尝试在Firefox中使用Firebug。安装它,为您的页面启用它,重新加载页面并检查“网络”选项卡以确保连接保持打开状态。
答案 1 :(得分:1)
这是需要经过的大量代码。你绝对应该让Firebug帮你诊断它。最新版本甚至会显示何时/是否发生onload事件。
Firebug还允许您只需编写console.log('somevar=',var);
来测试其值即可输出消息。您可以使用控制台在页面加载后测试值,因为您正在使用全局名称空间。
在我的脑海中,我会确保在PHP中正确关闭连接。还
document.onload = Start();
会将Start()的结果分配给onload,而不是稍后定义的Start。
window.onload也更兼容/标准。
您可能希望将js文件的输出保存为outputphpA.js和outputphpB.js,直接获取它们并查看加载行为是否不同。这应该有助于诊断它是否是一个php问题。