Я понял это, поэтому я попытаюсь ответить на свой собственный вопрос ...
Первый важный момент: пользовательские сценарии могут устанавливать параметры объекта Flash на лету - мне поверилиэто невозможно из-за комментария Сэма в этом вопросе .
Второй важный момент: значение wmode "непрозрачный" должно использоваться вместо "прозрачного" по соображениям производительности ( source1, source2 ).И то, и другое позволяет отображать html-контент поверх объекта Flash.
Поэтому мое решение заключалось в том, чтобы прослушивать, когда на страницу добавляются объекты Flash (или я думаю, если вы нацеливаетесь на объекты Flash, которые не добавлены).динамически, вы можете просто получить их сразу), найти параметр wmode того, который я хочу изменить, клонировать его и заменить исходный параметр моим клоном:
// code to create and style myDiv, see original question
document.addEventListener("DOMNodeInserted", nodeInserted, false);
function nodeInserted(e) {
if (e.target.id == "swf_div") {
var found = false;
var params = e.target.getElementsByTagName("param");
for (var i = 0; i < params.length; i++) {
if (params[i].getAttribute("name") == "wmode") {
var clone = params[i].cloneNode(true);
clone.setAttribute("value", "opaque");
params[i].parentNode.replaceChild(clone, params[i]);
found = true;
break;
}
}
// in case swf_div doesn't already have a wmode param
if (!found) {
var clone = e.target.cloneNode(true);
var param = document.createElement("param");
param.setAttribute("name", "wmode");
param.setAttribute("value", "opaque");
clone.appendChild(param);
e.target.parentNode.replaceChild(clone, e.target);
}
continueScript();
}
}
function continueScript() {
document.body.appendChild(myDiv);
// do wonderful things
}
Я до сих пор не понимаю, почемускрипт требует изменения wmode в Chrome, но не в FF.Но поскольку это так, а wmode = opaque снижает производительность, я сделаю проверку в браузере, прежде чем вносить изменения.Было бы очень полезно узнать, какая конкретная функция или правило контролирует это многоуровневое поведение, чтобы моя проверка была более точной.