Controllo del visualizzatore di pagine ereditato - AllowTransparency su Iframe
-
09-12-2019 - |
Domanda
Ho creato un controllo personalizzato che eredita da PageViewerWebPart
.
Ora ho bisogno di attivare l'attributo allowTransparency
a = "true"
sull'IFRAME reso per abilitare la trasparenza di sfondo per la pagina in IE8 +.
Ho scritto alcuni JavaScript per farlo (ma non funziona correttamente), e non ci sono metodi esposti della classe per aggiungere attributi a un elemento figlio annidato.
Il controllo rende la seguente gerarchia del codice:
<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>
.
Quindi ecco il mio 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 potrebbe non essere la risposta.C'è un modo per farlo tramite c # o forse c'è qualcosa di sbagliato nel mio JS?
Soluzione
L'ho risolto facendo svuotando il controllo e scrivendo il mio utilizzando un oggetto htmltextwriter per il rendering dello stesso codice HTML, ma con l'aggiunta dell'attributo AllowTransparency.