0

我正在我的网站上加载第三方内容。现在我正在尝试使用标题脚本代码从我的页面中删除所有 Flash 对象。问题是一切都必须在浏览器中加载,我只能在页面加载后删除 Flash 对象。所以我所做的是工作,但是当我的代码删除 Flash 对象时,它会使浏览器超载。请告诉我如何做得更好?

var all = document.getElementsByTagName("*");
for (var i=0, max=all.length; i < max; i++)swfobject.removeSWF(all[i].id); 

我想用 替换 flash 对象,例如all[i].parentNode.replaceChild(mydiv, all[i]); mydiv 是一个图像,它显示警告代替不允许的 flash 对象。

我是否只需要删除 flash 对象然后插入警告,或者在我替换 flash 对象后如何不使浏览器过载。

我没有在我的网站上使用 jquery,所以请建议只使用本机 javascript firefox 浏览器非常忙...在任务管理器中,我看到 FlashPlayerPlugin_11_7_700_224.exe | 中央处理器 21%

4

2 回答 2

1

原因是因为您正在使用 getElementsByTagName 并将其传递给“*”,这意味着您可能正在循环数千或数万个元素。

更好的方法是:

var allEmbeds = document.getElementsByTagName("embed");
// put code here to loop through and remove the embed elements
var allObjects = document.getElementsByTagName("object");
// put code here to loop through and remove the object elements, if they meet the criteria

您需要检查每个对象是否实际上是 Flash 对象。您可以通过检查它是否具有等于“clsid:d27cdb6e-ae6d-11cf-96b8-444553540000”的 classid 属性或等于“application/x-shockwave-flash”的类型属性来做到这一点。

于 2013-06-13T16:37:45.813 回答
1

还有更优雅的方式。为什么不简单地重新定义swfobject类中的一些方法呢?尝试这样做,将此脚本放在您的 <script>标签之后:

swfobject = { 
    embedSWF : function(swfUrlStr, replaceElemIdStr){
        document.getElementById(replaceElemIdStr).innerHTML = yourWarningMessage;
    }, 
    removeSWF : function(){
        // Just do nothing!
    }
}

甚至是这种重新定义:

for(var i in swfobject){
   if(typeof swfobject[i] == function){
      swfobject[i] = function(){};
   }
}
于 2013-06-13T17:44:27.423 回答