动态添加javascript到<head>


Dynamically adding javascript to <head>

如果浏览器检测到它在线,我使用函数"loadScript"来插入外部.js。

<script type="text/javascript">
function loadScript()
{
    if (navigator.onLine == true)
    {
        var src =  "js/getdata.js";
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.src = src;
        document.getElementsByTagName("head")[0].appendChild(script);
    }
}
</script>

一切正常,除了最后的脚本显示为…

<script type="text/javascript" src="js/getdata.js">
function getData() // get MySQL data from db
{
<?php
$dbopen = 0; // database flag
$con = mysql_connect("website.co.uk","guest","password");
mysql_select_db("DB", $con);
if (!$con)
{die('Could not connect: ' . mysql_error());}
else
{$dbopen = 1;}
?>  

等等……

Firebug控制台告诉我函数getData没有定义,内容

<?php

是语法错误…

我想让脚本进入头部,并将其定义为DOM内的可用函数。

如果您有什么想法,我将不胜感激。

GitaarLAB要求提供完整的代码,所以在这里。

<html>
<head>
<script type="text/javascript">
function loadScript()
{
if (navigator.onLine == true)
{
    var src =  "js/getdata.js";
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = src;
    document.getElementsByTagName("head")[0].appendChild(script);
}
}
</script>
</head>
<body>
<script type="text/javascript">
loadScript();
</script>
</body>
</html>

输出为…

<script type="text/javascript" src="js/getdata.js">
function getData()
{
<?php
$hhgopen = 0;
$con = mysql_connect("website.co.uk","guest","password");
mysql_select_db("ThisDB", $con);
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
else
{
$result = mysql_query("SELECT * FROM articles", $con);
$numrows = mysql_num_rows($result);
$hhgopen = 1;
}
?>
}
</script>

如果希望脚本由PHP生成,则需要将其放入PHP文件中。将文件重命名为js/getdata.js.php,并相应地更新src

另一个选项是将web服务器配置为解析所有.js文件为PHP,但它不太可能你真的想这样做。

您的服务器没有设置为像php一样处理.js文件。因此,它只是将该文件作为纯文本发送出去(就像它对常规javascript文件所做的那样)。

尝试将该文件重命名为具有.php扩展名

要在外部JS文件中运行PHP,通常需要做以下操作:

  1. 将getdata.js重命名为getdata.js.php
  2. 在getdata.js.php中添加一个特殊的头输出来标识它是javascript

    头("内容类型:应用程序/x-javascript");

问候。

快速注意:PHP文档中可以包含任何内容,无论是原始文本、HTML、JavaScript还是简单的PHP代码。你告诉浏览器链接一个js文档。此文件中包含的PHP代码将不会执行,因为没有任何内容告诉服务器使用PHP引擎对其进行解析。

尝试将文件重命名为"getdata.php"或"getdata.js.php",并更新脚本标记的源属性。

问题解决了。感谢Mark Parnell和W3Geek,他们给了我script.js.php扩展的线索。加载脚本的元素不能是函数。

Details:它现在作为脚本在head中运行,如果它在线则加载函数,然后等待窗口。在尝试调用新函数之前先Onload。

现在,如果应用在线,它会从PHP获取数据。如果应用处于离线状态,它会从缓存和localStorage获取数据。

IOS不再解析getData函数内的PHP,这会在应用脱机时导致错误。

希望这对你有帮助。

<html>
<head>
<script type="text/javascript">
if (navigator.onLine == true)
{
var src =  "js/getdata.js.php";
var script = document.createElement("script");
script.type = "text/javascript";
script.src = src;
document.getElementsByTagName("head")[0].appendChild(script);
}
</script>
</head>
<body>
<script type="text/javascript">
window.onload=function(){getData();};
</script>
</body>
</html>