Z-BlogPHP 1.6.0 Valyria后台Javascript加载失败解决方法

Z-BlogPHP 1.6.0 Valyria+SQLite安装完成进入后台,页面总提示Javascript加载失败:



打开Firefox控制台,错误信息为"ActiveTopMenu is not defined"和"AddHeaderIcon is not defined":



ActiveTopMenu和AddHeaderIcon未定义?在文件夹搜索它们,发现在/zb_system/script/c_admin_js_add.php有定义这两个方法,并且页面也有调用c_admin_js_add.php:

<script src="http://www.moju365.com/zb_system/script/c_admin_js_add.php?v=162105" type="text/javascript"></script>

有定义、有调用为什么还提示未定义?Firefox控制台第一行的提示信息引起了我的注意:

引用内容 引用内容
即使其 MIME 类型(“”)不是有效的 Javascript MIME 类型,仍已加载来自“http://www.moju365.com/zb_system/script/c_admin_js_add.php?v=162105”的脚本。[详细了解]

点击“[详细了解]”打开《X-Content-Type-Options》页面,大意是说如果服务器端设置了"X-Content-Type-Options: nosniff",那么对于style和script文件,服务器端一旦设置了不正确的 MIME 类型,请求将会被阻止,再看下Firefox网络工具,似乎也验证了这点:





但是搜索文件夹,并没有找到相关地方设置"X-Content-Type-Options: nosniff",又尝试在c_admin_js_add.php设置Content-Type:

header('Content-type: text/javascript');

问题依旧,最终解决方法:

在浏览器打开c_admin_js_add.php,保存为/zb_system/script/c_admin_js_add.js(注意扩展名),然后打开/zb_system/admin/admin_header.php,找到:


<script src="<?php echo $bloghost ?>zb_system/script/c_admin_js_add.php?v=<?php echo $blogversion; ?>" type="text/javascript"></script>

修改为:

<script src="<?php echo $bloghost ?>zb_system/script/c_admin_js_add.js?v=<?php echo $blogversion; ?>" type="text/javascript"></script>

保存,问题解决。

终极解决方法:Firefox的提示让我误以为是X-Content-Type-Options的原因,后来发现不是的,问题出在Z-BlogPHP对IIS的一些处理上,在c_admin_js_add.php找到下边代码注释掉即可:

// if (isset($_SERVER["HTTP_IF_NONE_MATCH"]) && $_SERVER["HTTP_IF_NONE_MATCH"] == $m) {
//     if (PHP_VERSION_ID > 50400 && IS_IIS) {
//         SetHttpStatusCode(304);
//         die;
//     }
// }


评论: 0 | 引用: 0 | 查看次数: 153
发表评论
登录后再发表评论!