Contrôle de visionneuse de page hérité – allowTransparency sur iframe
-
09-12-2019 - |
Question
J'ai créé un contrôle personnalisé qui hérite de PageViewerWebPart
.
Maintenant, je dois basculer le allowTransparency
attribuer à = "true"
sur l'iframe rendue pour activer la transparence d'arrière-plan de la page dans IE8+.
J'ai écrit du javascript pour le faire (mais cela ne fonctionne pas correctement) et il n'existe aucune méthode exposée de la classe pour ajouter des attributs à un élément enfant imbriqué.
Le contrôle restitue la hiérarchie de code suivante :
<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>
Voici donc mon 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 n'est peut-être pas la réponse.Existe-t-il un moyen de le faire via C# ou peut-être qu'il y a un problème avec mon js ?
La solution
J'ai résolu cela en supprimant le contrôle et en écrivant mon propre objet à l'aide d'un objet HTMLTextWriter pour rendre le même code HTML, mais avec l'ajout de l'attribut AuthTransparency.