我有一个 Web 应用程序,该应用程序在页面中穿插了 javscript。发生的事情是 safari 将转储 javascript 代码的源代码而不是执行它。我可以始终如一地重现这一点。
该页面是不同形式内容的混搭:
它使用 osflv 加载 flash 视频,并通过服务器端的 php 脚本生成。此外,该页面还包含对 Google map API 的调用以显示 map 。内容放置在单独的选项卡中,使用 javascript 提供选项卡交互。
我也在使用 mootools,但不确定这是否会导致问题。
这里是 javascript 包括:
<script type="text/javascript" src="/js/mootools-1.2.1-core.js"></script>
<script type="text/javascript" src="/js/mootools-1.2-more.js"></script>
<script type="text/javascript" src="/js/tiny_mce/tiny_mce.js"></script>
<script type="text/javascript" src="/js/sifr.js"></script>
<script type="text/javascript" src="/js/sifr-debug.js"></script>
<script type="text/javascript" src="/js/common.js"></script>
<script type="text/javascript" src="/js/alerts.js"></script>
<script type="text/javascript" src="/js/swfobject.js"></script>
<script type="text/javascript" src="/js/autocompleter.js"></script>
<script type="text/javascript" src="/js/observer.js"></script>
<script charset='ISO-8859-1' src='/js/rac.js' language='javascript'></script>
rac.js 来自 osflv,common.js 和 alerts.js 是自定义 javascript 代码,包括用于在页面中显示或操作数据的自定义类和函数。
这段代码在页面中执行得很好:
<script type="text/javascript">
var whitney = { src: '/flash/whitney.swf'};
sIFR.activate(whitney);
sIFR.replace(whitney, { selector: 'h6#propertyHeadline', wmode:'transparent',css: {'.sIFR-root': {'color': '#1ca9b9' }}});
</script>
这段代码也执行得很好:
<script language='javascript'>
var src = '/player';
if(!DetectFlashVer(9, 0, 0) && DetectFlashVer(8, 0, 0))
src = 'player8';
AC_FL_RunContent('codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0', 'width', 520, 'height', 440, 'src', src, 'pluginspage', 'http://www.macromedia.com/go/getflashplayer', 'id', 'flvPlayer', 'allowFullScreen', 'true', 'movie', src, 'FlashVars','movie=media/orig/4b845109d99d0.flv&fgcolor=0x1CA9B9&bgcolor=0x000000&autoload=off&volume=70');
</script>
这是在 body 标记结束之前嵌入到页面底部的 html 中的最后一段代码,Safari 会在超出良好 map 脚本包含的任何点随机吐出浏览器中的 src 代码:
<script src="http://maps.google.com/maps?file=api&v=2&key=googlemapsapikeyblockedout" type="text/javascript"></script>
<script type="application/javascript">
function InitPropertyDashboardTabs(){
mytabs = new TabPanel('DashboardTabPanel');
initializeGallery();
initializeSiteplan();
initializeMap('address blocked out');
}
var map = null;
var geocoder = null;
function initializeSiteplan()
{
var flashvars = {PropertyId:1,BasePath:'/',wmode:'transparent'};
var params = {wmode: 'transparent'};
var attributes = {id: 'SWFSitePlan',name: 'SWFSitePlan'};
swfobject.embedSWF("/flash/FloorplanViewer/FloorplanViewer.swf", "SiteplanFlash", "915", "500", "9.0.0", "expressInstall.swf", flashvars, params, attributes);
}
function initializeGallery()
{
var params = {wmode: 'transparent'};..... (more code)
这是带有js转储的页面
(来源:oxid8.com)
页面应该是这样的:
(来源:oxid8.com)
最佳答案
首先,你不应该使用language
属性,它是deprecated .
我唯一能看到的是您在 HTML 中使用 application/javascript
而不是 text/javascript
(您在 HTML 中指定的和MIME 类型的服务器在发送 Javascript 文件时使用),但我无法使用像这样的简单测试用例在 Chromium/Linux 上重现任何错误
<!DOCTYPE html>
<html>
<head>
<title>dkdkd</title>
</head>
<body>
<script type="application/javascript">
var i=0;
</script>
</body>
</html>
(也许你也可以试试这个。)
以防万一:脚本元素是否正确关闭?所有 Javascript 是否正确,即是否通过 JSLint ?
也许您可以粘贴 HTML 页面的完整源代码(最好是类似 Pastebin 的内容),以便我们仔细查看。
关于javascript - safari 显示 javascript 源而不是执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2322734/