我有一个网页应用程序,javscript穿插在页面中。会发生什么是safari会转储javascript代码的源代码而不是执行它。我可以一致地重现这一点。
该页面是不同形式内容的混搭:
它使用osflv加载flash视频,并通过服务器端的php脚本生成。此外,该页面还包含对Google Map API的调用以显示地图。使用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将在浏览器中随机吐出src代码,超出了良好的map脚本包括:
<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转储的页面 alt text http://www.oxid8.com/screen1.jpg
这是页面应该是这样的: alt text http://www.oxid8.com/screen2.jpg
答案 0 :(得分:2)
首先,您不应使用language
属性,而是deprecated。
我唯一能看到的是你在HTML中使用application/javascript
而不是text/javascript
(你在HTML中指定的内容与发送Javascript时MIME类型服务器使用的内容之间存在差异文件),但我无法使用像
<!DOCTYPE html>
<html>
<head>
<title>dkdkd</title>
</head>
<body>
<script type="application/javascript">
var i=0;
</script>
</body>
</html>
(也许你也可以试试这个。)
以防万一:脚本元素是否正确关闭?是否所有Javascript都正确,即它是否通过了JSLint?
也许您可以粘贴HTML页面的完整来源(最好是Pastebin之类的内容),以便我们仔细查看。
答案 1 :(得分:0)
我想我会试一试。我在一些使用TinyMCE的页面上遇到了类似的问题(javascript甚至部分html都显示在页面上)
我的解决方案是升级我正在使用的TinyMCE版本。 v3.3有一个大修的Webkit处理程序。
据我所知,问题是TinyMCE正在向页面中注入(不良)额外的javascript块。
此(以及少数类似的块)始终注入&lt; head&gt;
<script type="text/javasript" src="http://www.example.com/javascript/rte/langs/en.js" onload="tinemce.dom.ScriptLoader._onLoad(this,'http://www.example.com/javascript/rte/langs/en.js', 0);">
当onload触发时,将以下块注入到DOM中的随机位置,将其放置在顶部的任何位置。
<script type="javascript" src="http://www.example.com/javascript/rte/langs/en.js">
结果是,如Webkit Developer Tools所示,转向
<td class="tab" nowrap="">
成:
<td class="ta<script stype="text=""javascript"" src="http://www.example.com/javascript/rte/langs/en.js"> "b" nowrap=>"
由于显然无效的标记,因此输出了生成的垃圾。
将我的TinyMCE安装从之前的stable升级到v3.3rc1修复了这个问题。TinyMCE Changelog引用了一个完整的Webkit大修。
编辑:随机我真的是随意的。它每次都会在不同的位置插入脚本标记,有时会破坏内容,有时则不会。