safari显示javascript源而不是执行

时间:2010-02-24 00:02:31

标签: javascript flash safari mootools

我有一个网页应用程序,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&amp;v=2&amp;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

2 个答案:

答案 0 :(得分:2)

首先,您不应使用language属性,而是deprecated

我唯一能看到的是你在HTML中使用application/javascript而不是text/javascript(你在HTML中指定的内容与发送Javascript时MIME类型服务器使用的内容之间存在差异文件),但我无法使用像

这样的简单测试用例在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之类的内容),以便我们仔细查看。

答案 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大修。

编辑:随机我真的是随意的。它每次都会在不同的位置插入脚本标记,有时会破坏内容,有时则不会。