PHP / JavaScript。即使在完成所有资源下载以及Opera / Chrome问题之后,浏览器也会“永久加载”

时间:2009-05-28 02:30:24

标签: php javascript cross-browser

我有一个页面可以执行以下操作:

  1. 浏览器加载一个非常简单的页面,其中包含有效的头部和正文,只有一个脚本/ noscript对作为内容。

  2. 在正文中,它有一个运行函数onLoad的脚本(脚本a)。该函数动态地包含第二个脚本(脚本b),并在其可用时运行其中的函数。

  3. 第二个脚本是一个完成各种工作的.js文件。

  4. 这两个脚本都由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");
    }
    

2 个答案:

答案 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问题。