[英]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.