很多用户已经阅读了 Microsoft Internet Explorer 中已发布的更改。您可能会对使用嵌入式 (“活动”) 内容和应用程序将给您的站点带来哪些改变还存有疑问。活动内容包括 Macromedia Flash、Shockwave 或 Adobe Acrobat 文件。您很可能开始考虑该怎样做好准备。
浏览器更改的实际影响是什么? 这些更改何时发生? 用户明天或下周还仍然能够查看活动内容吗?
在用户更新 Windows 上的 Internet Explorer 浏览器之前, 仍然可以采用当前的形式查看嵌入式内容和程序—。浏览器更新在 2006 年 2 月作为可选更新第一次发布。用户更新浏览器后, 在与嵌入式或“活动”内容交互前, 必须需要单击。查看 Microsoft 开发人员网络 (MSDN) 上的资源*, 您能在此处获得更多信息。
有些站点将不受此更改的影响。更新的浏览器会在显示使用 <object>、<embed> 或 <applet> 编码的活动内容 (内嵌在 HTML 文件中) 之前, 提示用户进行单击。然而, 如果 HTML 页面使用由外部脚本文件 (如 JavaScript ) 生成的标记, 如使用复杂 Flash 检测脚本的站点, 那么此页面将无变化, 仍然可以正常工作。
许多用户希望能修复站点以应对强制性的浏览器更改。利好的消息是您现在可以对您的站点立即应用几种规避设计。
示例文件*
下载 JavaScript 文档 (4K ZIP)
注意: 本示例档案包括三个文件:
以下是由 Adobe 开发团队提供的“使用前后”代码示例, 您可以使用这些代码来更新站点上包含活动内容的 HTML 页面。
此处是以前在更新的浏览器中不运行的代码 (<object> 简单标记) 示例:
<object classid="clsid:D27CDB6E..." ...>
<param name="movie" value="foo.swf">
</object>
如下面两种方法所述, 如果您用来替换此标记的脚本调用 HTML 页面之外的代码, 那么该标记在更新的 IE 版本中将继续运行。在 msdn.microsoft.com/ieupdate/* 上查看 Microsoft 开发人员网络 (MSDN) 的资源, 在此您能够获得更多信息。
我们已对该 JavaScript 修复程序进行了测试;它适用于当前常用的浏览器。查看我们的测试距阵以检验该解决方案是否适用于您站点的访问者。
如果您的站点只包含一页或几页嵌入式内容, 则可能要使用以下简单的解决方案。实施这一解决方案, 您需要为您站点上包含嵌入式内容的页面创建单独的外部 JavaScript (JS) 文件。
注意: 如果一个页面上包含多个嵌入式内容, 那么要在外部 JS 文件中, 为每个单独内容的 document.write 标记创建唯一的函数 (参看步骤 1) 。此外, 还要注意该解决方案并不包含在示例文件中, 您只需按照下面的说明即可从当前您的 HTML 页面中存在的代码创建新代码。
完成此操作的步骤如下:
在您的站点上创建并放置外部 JS 文件。在本示例中, 称为 foo.js 文件。该脚本需要对您 HTML 文件中之前拥有的全部对象/嵌入式标记执行 document.write:
function RunFoo()
{
document.write('<object classid="clsid:D27CDB6E..." ...>\n');
document.write('<param name="movie" value="foo.swf" />\n');
document.write('</object>\n');
}
将一个 JavaScript (包含指向步骤 1 中 JavaScript 文件的语句) 添加到网页嵌入内容的 <head> 部分。
<script src="[path]/foo.js" type="text/javascript"></script>
替换每一个调用相应外部文件的 <object>、<embed> 或 <applet> 标记, 如下所示:
<script type="text/javascript">RunFoo();</script>
如果您的站点包含很多嵌入式活动内容, 或者您采用多种方式嵌入内容, 那么这一解决方案将给您带来巨大的优势。对所有嵌入式 Flash 和 Shockwave 内容, 您可以使用一个外部 JS 文件, 而不是像“解决方案之一”那样为每一个受影响的文件都创建一个外部 JS 文件。JS 文件包含基于它从从主页接收的参数嵌入活动内容的函数。
实施这一方案您需要遵循 3 个步骤:
将包含解决办法函数的外部 JS 文件复制到您网站上的共享位置。在本示例中称其为 AC_RunActiveContent.js或您为其选择的名称。
下载 JavaScript 文件 (4K ZIP)
AC_RunActiveContent.js 文件中的代码使用传递到它的参数 (参见步骤 3) , 以构建写入您文档的完整标记字符串。
将一个 JavaScript (包含指向步骤 1 中 JavaScript 文件的语句) 添加到包含对象/嵌入标记的站点上每个网页的 <head> 部分。
<script src="[path]/AC_RunActiveContent.js" type="text/javascript"></script>
用相应的函数调用替换您的网页中 <object> 和 <embed> 标记的每个实例。此处有两个函数调用供您选择: 一个用于 Flash 内容, 一个用于 Shockwave 内容。
AC_FL_RunContent(
"att1Name","att1Value",
"att2Name","att2Value",
...
"attnName","attnValue"
);
AC_SW_RunContent(
"att1Name","att1Value",
"att2Name","att2Value",
...
"attnName","attnValue"
);
注意: 只有启用了 JavaScript, 这些函数才能起作用。为了能让在其浏览器中禁用了 JavaScript 的用户查看活动内容, 请遵循 <noscript> 标记带有传统 <object>/<embed> 标记的每个函数, 禁用 JavaScript 的用户如何做呢? 部分对此进行了描述。
用这些新的函数调用替换了对象和嵌入的标记后, 编辑参数对 (由 "att1Name"、"att1Value"表示) , 以包含原始标记中的相应属性和值, 如movie、id、bgcolor等。你可以在示例文件 SampleActiveContent.html 中查看针对特定 Flash 文件的该代码的示例, 它包含在示例文件下载中。
当编辑函数调用以传递电影属性时, 电影名中不要包含文件的扩展名。按照以下方式传递电影名:
"movie", "foo".
外部 JavaScript 代码将添加相应的扩展名。
如果是向 Flash 文件传递参数, 则您可能会有类似以下的原始电影属性:
foo.swf?username=Bob&color=red
要成功传递名称和颜色属性, 请按照以下方式将其作为参数包括在您的函数中, 请记住要省略文件扩展名:
"foo?username=Bob&color=red"
为确保在名称/值对中列出您的参数, 您需要向 AC_RunActiveContent.js 代码传递项的偶数, 否则它将无法工作。由于特定播放器函数调用, 它还会自动插入要求的其他设置, 如 classid 和 mimeType。如果您需要更新某个要求的设置的值, 请在 AC_FL_RunContent() 或 AC_SW_RunContent() 函数中编辑这些值, 您可以在 AC_RunActiveContent.js 代码中找到它们。在您的 HTML 页面中, 仅为可选的形参传递实参。
下面给出了您如何使用该方法替换标准的内联对象以及播放 Flash 文件的嵌入式标记的示例。如果需要替换以下代码:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="550" height="400" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="foo.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="foo.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="foo" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
您需要在其相应位置插入以下函数调用:
<script type="text/javascript" >
AC_FL_RunContent('codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0','width','550','height','400','align','middle','src','foo','quality','high','bgcolor','#ffffff','name','foo','allowscriptaccess','sameDomain','pluginspage','http://www.macromedia.com/go/getflashplayer','movie','foo' );
</script>
上述两种方法都依赖 JavaScript。在您站点的访问者中, 有一小部分人可能在其浏览器中禁用了 JavaScript。上述建议的方法对这些少数用户不起作用, —他们根本看不见您嵌入的内容。需要牢记于心的是, 禁用了 JavaScript 的一些或大部分 IE 用户可能也禁用了 ActiveX 支持。然而, 禁用了 ActiveX 的用户一直没有看到在浏览器中显示的 Flash 和 Shockwave 内容。面向嵌入式内容的 JavaScript 技术移植并不会改变或影响其体验。您只需要关注那些禁用了 JavaScript, 但启用了 ActiveX 的用户。
为了给禁用了 JavaScript 但启用了 ActiveX 的用户提供支持, 可以将 <object> 和 <embed> 标记直接插到 HTML 中, 但要将其放在一个<noscript> 标记中。<noscript> 标记是一个标准的标记, 它为禁用了 JavaScript 的用户提供错误保护替代码。下面是嵌套在 <noscript> 标记中的标准嵌入式 Flash 电影的示例:
<noscript>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="550" height="400" id="foo" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="foo.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="foo.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="foo" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
</noscript>
禁用了 JavaScript 的用户在访问包含类似于上述代码的页面时, 需要在更新的浏览器中单击以激活内容。然后, 用户就可以像往常一样与内容交互了。
在本文附随的示例文件中, 我们还提供了一个称为 AC_ActiveX.js 的 JavaScript 文件。在使用上述方法时, 您不需要使用该脚本显示 Flash 或 Shockwave 内容。然而, 使用网页中其他类型的活动内容的开发人员可以使用该脚本显示其他类型的内容, 而不要求用户单击来激活它。将其看作是一种可处理各种内容的通用脚本。您可以用与使用 AC_RunActiveContent.js 非常类似的方式来使用该脚本, 以上步骤已对此进行了描述。
要实施该脚本, 首先要使用以下代码将外部文件包括在 HTML 页面的 <head> 部分。
<script src="[path]/AC_ActiveX.js" type="text/javascript"></script> <script src="[path]/AC_RunActiveContent.js" type="text/javascript"></script>
然后, 就像在 Flash/Shockwave 方法中一样, 替换 <object> 和 <embed> 代码, 修改属性和值对以与您的内容匹配。
<script type="text/javascript">
AC_AX_RunContent( 'classid','clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFB','width','150','height','100','src','fakefile.foo' );
</script>
注意: 您还可以在示例 HTML 文件 SampleActiveContent.html 中找到与此类似的示例代码, 它包含在示例文件下载中。
Adobe 相信您能够采用所提供的方法之一成功修复您的站点。但我们想做到万无一失, 因此我们将继续为您提供我们能够提供的所有信息。请继续关注本站点以获取有关显示活动内容的更新和新方法。