[英]Changing <object> paramaters at page load in IE8
我有一个带有嵌入式Flash对象的纯HTML网页。 基于查询字符串的存在,我想更改对象的参数之一,因此我写了这样的内容:
<object ...>
<param ...>
<param ...>
<script type="text/javascript">
if (window.location.search.indexOf("stuff")>=0) {
document.write("<param variant 1>");
} else {
document.write("<param variant 2>");
}
</script>
</object>
它在Firefox中运行良好,但是IE8完全不执行js代码。 我用一个简单的alert(“ a”)调用替换了整个脚本,而IE8也未执行该调用。 使用开发人员工具,我可以看到该脚本,但是该脚本未突出显示,也无法在其中设置断点,因此,我很确定它没有将其确认为有效脚本。
这是IE限制,还是我缺少什么?
我已经用document.write调用代替了整个方法,并且效果很好,但是我希望更接近我最初的尝试。
我认为问题出在DOM上,Internet Explorer似乎没有执行嵌入式JavaScipt。
看来,在初始化之前先等待窗口加载,然后将参数添加为子代(而不是编写HTML)是正确的方法。
以下各项在Firefox和Internet Explorer中均按预期工作。
<html>
<head>
<script type="text/javascript">
listen(window, "load", "onload", initiate);
// called when the window finishes loading
function initiate() {
checkStuff();
}
function checkStuff() {
var myObj = document.getElementById("myObj");
var elm = document.createElement('param');
if (window.location.search.indexOf("stuff") >= 0){
elm.setAttribute("name", "param1");
elm.setAttribute("value", "true");
} else {
elm.setAttribute("name", "param2");
elm.setAttribute("value", "true");
}
myObj.appendChild(elm);
}
// just a simple function to attach events to objects
function listen(obj, event_normal, event_alt, func) {
if (obj.attachEvent) {
obj.attachEvent(event_alt, func);
} else if (obj.addEventListener) {
obj.addEventListener(event_normal, func, false);
} else {
obj.addEventListener(event_normal, func, false);
}
}
</script>
</head>
<body>
<object id="myObj"></object>
</body>
</html>
如果以正确的DOM方式尝试它会失败吗? 另外,您确定不希望variant="1"
而不是"variant 1"
吗? 您在某处不需要name
属性吗?
<object id="foo"></object>
<script>
if (window.location.search.indexOf("stuff")>=0) {
var object = document.getElementById('foo'), param = document.createElement('param');
param.setAttribute('variant', '1'); // not sure if you want variant=1 or variant=variant AND 1=1
object.appendChild( param );
} else { /* add the rest */ }
</script>
我删除了一些html。
我根据您的示例编写了以下内容:
<script type="text/javascript">
window.onload = function() {
if (window.location.search.indexOf("stuff")>=0) {
alert("stuff!");
} else {
alert("nope!");
}
};
</script>
<object>
<param />
<param />
</object>
并且它在IE8中可以正常工作。 我做了两个基本的改动:
我将脚本移出了HTML,并使其作为与onload事件相关的函数运行。
我改变了params
更有效XHTML,使用<param />
代替<param>
这可能不是您要找的答案,但是当涉及到对Flash进行动态处理时,我只是放弃并使用SWFObject 。 呈现Flash时,发生了太多复杂且非标准的事情,并且在不同的浏览器,Flash版本等中也有所不同。因此,依赖外部库可能不如找到最有效,最简单的嵌入到给定解决方案的方法优雅情况,但节省了大量时间,以后您不太可能在浏览器X中发现它已损坏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.