Controle herdado do visualizador de páginas - permitirTransparência no iframe
-
09-12-2019 - |
Pergunta
Eu criei um controle personalizado que herda de PageViewerWebPart
.
Agora preciso alternar o allowTransparency
atribuir a = "true"
no iframe renderizado para ativar a transparência do plano de fundo da página no IE8+.
Eu escrevi um javascript para fazer isso (mas não está funcionando corretamente) e não há métodos expostos da classe para adicionar atributos a um elemento filho aninhado.
O controle renderiza a seguinte hierarquia de código:
<div>
<table>
<tr>
<td valign="top">
<div WebPartID="00000000-0000-0000-0000-000000000000">
<iframe title="Page Viewer">
<div class="UserGeneric">iframe not supported warning</div>
</iframe>
</div>
</td>
</tr>
</table>
</div>
Então aqui está meu javascript:
function setTransparency() {
var divs = document.getElementsByTagName("div");
var element;
var eClass;
var result;
// Get "marked" div (container for fly out)
for (var i = 0; (element = divs[i]) != null; i++) {
eClass = element.className;
if (eClass) {
if (eClass.indexOf("marked") != -1) {
result = element;
break;
}
}
}
// Find iframe contained within flyout
var ifr = findDescendantIframe(result);
if (ifr != null) {
ifr.allowTransparency = "true";
}}
// Recursive find of iframe (kind of) - if no children, no return value
function findDescendantIframe(parent) {
if (parent.hasChildNodes()) {
for (var i = 0; (child = parent.childNodes[i]) != null; i++) {
if (child.nodeName == "IFRAME") {
return child;
}
return findDescendantIframe(child);
}
}}
Javascript pode não ser a resposta.Existe alguma maneira de fazer isso via C# ou talvez haja algo errado com meu js?
Solução
Resolvi isso descartando o controle e escrevendo o meu próprio usando um objeto HtmlTextWriter para renderizar o mesmo código HTML, mas com a adição do atributo permitTransparency.