我现在差不多完成了一份合同,而且在最后一分钟我的大部分javascript / jQuery都无法在PC或Mac上运行。
整个网站的设计采用渐进式增强和不引人注目的javascript转换为?#hash链接,淡入淡出页面以及平滑翻转 - 所有这些都已停止仅适用于Safari。
我已经读过Safari可能无法处理大型.js文件,但我的jquery页面不到10k,我使用压缩的jquery库大约55k。
以下是我现在所使用的,适用于IE,FF和Chrome的最新版本 - test.cultureconquest.com
答案 0 :(得分:4)
当我运行代码主体的jslint时,会暴露许多错误。很多小东西,比如丢失分号。其他一些事情,比如命名变量“class”,这是JavaScript中的保留字可能是个问题。
你有一些逻辑可以使用真正的jQuery习语更好地处理。例如,你这样做:
var class = $(this).attr("class");
class = class.substr(5);
var ext
if ( class == "ccm" ) {
ext = "cultureconquest.com";
}
if ( class == "gmail" ) {
ext = "gmail.com";
}
jQuery有一个方法来测试一个元素是否包含一个类hasClass()
var ext;
if ($(this).hasClass("ccm")) {
ext = "cultureconquest.com";
}
if ($(this).hasClass("gmail")) {
ext = "gmail.com";
}
我还注意到你正在使用jQuery的livequery()
扩展名。在jQuery 1.3中添加了等效方法live()
。有关详细信息,请参阅live()
。
这些是要注意的几件事。如果你可以让你的代码通过jslint测试,我打赌你会在很多方面让它在Safari中运行。
答案 1 :(得分:0)
我看到的主要问题是,由于在两个class
.MAIL
语句中使用了变量名.livequery
,因此抛出了Parse错误。只需更改该变量名称(在这两个函数中出现10次),如下所示:
// SAFE EMAIL //
$(".MAIL").livequery( function() {
var email = $(this).attr("id");
var className = $(this).attr("class");
className = className.substr(5);
var ext
if ( className == "ccm" ) {
ext = "cultureconquest.com";
}
if ( className == "gmail" ) {
ext = "gmail.com";
}
document.getElementById(email).innerHTML = email+"@"+ext;
$(this).attr("title","");
});
$(".MAIL").livequery("click", function() {
var className = $(this).attr("class");
className = className.substr(5);
var ext
if ( className == "ccm" ) {
ext = "cultureconquest.com";
}
if ( className == "gmail" ) {
ext = "gmail.com";
}
var email = $(this).attr("id")+"@"+ext;
var mailto = "mailto:"+email;
window.location = mailto;
});