| 登录 | 不是会员? | 联系 ADC |
|
ADC 首页 > 互联网和 Web > Safari 的常见开发问题 |
|
|
| navigator.appCodeName = "Mozilla" | navigator.appName = "Netscape" |
| navigator.appVersion = "5.0" | navigator.platform = "MacPPC" |
| navigator.product = "Gecko" | navigator.productSub = "20030107" |
| navigator.vendor = "Apple Computer, Inc." |
显示您的浏览器的漫游器值。
Safari通过W3C DOM-2来支持DHTML,使用户可以通过JavaScript对页面上几乎所有的元素进行访问。如果您希望进一步学习,请查看苹果的英特网开发者网站上关于如何使用DOM-2的两部分系列:第I部分, 第II部分.
当您需要在脚本中测试DHTML支持时,请检查document.getElementById方法的值,Mozilla,Internet Explorer 5+,和其它现代浏览器都支持这个方法:
if (document.getElementById)
{
// browser supports W3C DOM
}
请注意,一些老版本的浏览器通过其它的DOM来支持DHTML。Internet Explorer 4支持的DOM用document.all作为容器对象,而Netscape 4支持的DOM则使用document.layers作为容器对象。如果要测试一个浏览器是否支持这些DOM,可以用下面的代码:
if (document.getElementById || document.all || document.layers)
{
//browser can handle DHTML
}
这段代码运行的结果:
对象检测是测试浏览器能力的最好方法。先前的实例提供了一个对象检测的简单例子:即根据对象是否存在(document.getElementById)来确定脚本的动作。这篇英特网开发者文章给出了对象检测方面的一些其它细节,并说明这种方法为何比根据浏览器的不同进行操作的方法更加灵活和强壮。
Safari通过有效地使用内容缓存来获得很多性能的提升。如果您有希望避免被缓存的页面,包括那些写出cookie的内容,则请在生成页面的时候输出下面的页面头部信息:
// PHP example - include at the top of your pages
<? php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
?>
Safari的后退/前进(Back/Forward)缓存(用户按压Back或者Forward这两个浏览器按键时使用的缓存)也可以被阻断,只要确保您的页面包含一个帧就可以了。基于帧的页面永远不会存储在后退/前进缓存中,通过增加一个不可见的iframe,您就可以确保不是基于帧的页面的行为和基于帧的页面相类似,如下所示:
<iframe style="height:0px;width:0px;visibility:hidden" src="about:blank">
this frame prevents back forward cache
</iframe>
下面的函数设定一个cookie,并测试是否存在:
function testCookies() {
var exp = new Date();
exp.setTime(exp.getTime() + 1800000);
// first write a test cookie
setCookie("cookies", "cookies", exp, false, false, false);
if (document.cookie.indexOf('cookies') != -1) {
alert("Got Cookies!");
}
else {
alert("No Cookies!");
}
// now delete the test cookie
exp = new Date();
exp.setTime(exp.getTime() - 1800000);
setCookie("cookies", "cookies", exp, false, false, false);
}
function setCookie(name, value, expires, path, domain, secure) {
var curCookie = name + "=" + escape(value) +
((expires) ? "; expires=" + expires.toGMTString() : "") +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
document.cookie = curCookie;
}
可以试一下运行结果:
把下面的代码放到页面的<head>标识中可以为您的网站增加一个Favicon:
<link rel="icon" href="favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
如果您希望学习如何创建一个Favicon,则请看一下这个教程。
Safari使用和Mac OS X一起发布的最新版本的Java(Java 1.4.2)。对Java的更新可以通过软件更新程序(software update)周期性地得到,或者从Java技术页面上下载。
Safari支持Java Applet,然而一些用户可能更喜欢关闭Applet的使用。使用navigator变量的javaEnabled()函数可以确定Java功能是否可用。
这里是运行情况:
如果在60秒内没有接收到HTTP请求的响应,或者服务器数据传输停止60秒以上,Safari就会超时。
Safari使用Netscape风格的插件。如果需要如何为Safari书写插件的更多信息,请参见苹果关于Mac OS X上浏览器插件的技术说明和Netscape的权威资料插件指南。
这里有一个很简单的插件实例,然而您需要从Netscape得到正确的“npapi.h”头文件,并自行编译。
为了确保一个给定的插件对于所有Safari用户都是可用的 - 包括Web Kit,浏览器插件应该放在'/Library/Internet Plug-Ins/'目录下。
Safari渲染HTML方式遵循W3规范。您可以通过W3 HTML验证器来验证您的页面是否遵循W3规范。
请确保您的页面中定义了DTD,并且通过验证,这样您的页面就可以被正确显示了。
另外,Bookmarklets或者Favlets是极其有用的工具,可以为您在页面开发过程中提供方便。您可以把下面的连接拖拽到Safari的书签条(Bookmarks Bar),把它存储为一个书签(Bookmark),让它帮助您进行调试。
Safari被设计为可以提供最完整的CSS规格的实现。然而也有一些CSS元素并不可用,或者只有部分实现。如果您的网站使用的CSS似乎不能在Safari上工作,则请查看这个列表来进行检查。
为了帮助您用Safari来调试网站中JavaScript的交互,Safari提供了“调试”菜单,使您可以把JavaScript的错误记录打开,并输出到控制台上。如果要显示调试菜单,请打开Terminal窗口,键入:
defaults write com.apple.Safari IncludeDebugMenu 1
启动Console程序(/Applications/Utilities/Console),启动Safari,并选中其Debug菜单上的“记录Javascript例外”。
Safari实现了一个弹出式窗口的阻断器,以便使弹出窗口的干扰最小化,很多站点用这种窗口来做广告。弹出式窗口将会过滤掉所有的弹出式窗口,除了那些由用户动作触发的以外,比如鼠标点击或者按压键盘。由脚本<script>标识,onLoad处理函数,onUnload h处理函数,或者定时器直接触发的弹出窗口将会被阻断。
在QA时请务必选择“阻断弹出窗口”选项,以保证您的用户在打开这个阻断功能时不会失去某些功能。
是的! - Safari 1.2的实现支持了最为普遍的Live Connect技术 - 即支持在同一个页面上的Java Applet和JavaScript之间进行通讯。您可以查看起运行情况,或者下载实例,然后创建您自己的程序。
Safari的实现并不支持Netscape风格的插件和Javascript之间的通讯。
再次确认:是的! - Safari 1.2的实现遵循Mozilla模型,能够成功运行位于Mozilla.org站点上的Mozilla实例,那些要求DOMParser的除外。放进xmlhttprequest对象的内容通常是XML,然而它可以存放任何类型的文本数据,可以通过DOM调用来引用这些数据,这些DOM调用和访问可见web页面的文档内容的DOM调用一样。
阅读这篇文章可以学到如何使用XMLHttpRequest对象来使web页面和XML数据相连。
当页面元素的‘title’属性被设定时,Safari可以支持该页面元素上面的浮动文本的显示。然而一些浏览器在设定'alt'属性时也可以显示“tool-tip”,创建'alt'属性是为了为那些视觉效果不强的屏幕读取程序提供信息,并且仅用于此目的。您可以把鼠标移动到下面的图像上,察看实际的运行情况。
