Modification des données de contenu sur un Objet de la Balise HTML
J'ai une page HTML qui contient une balise Object pour l'accueil d'un incorporé de la page HTML.
<object style="border: none;" standby="loading" id="contentarea"
width="100%" height="53%" type="text/html" data="test1.html"></object>
Cependant, j'ai besoin d'être à modifier la page HTML dans la balise object. Le code actuel semble créer un clone de l'objet et remplace l'objet existant avec elle, comme suit:
function changeObjectUrl(newUrl)
{
var oContentArea = document.getElementById("contentarea");
var oClone = oContentArea.cloneNode(true);
oClone.data = newUrl;
var oPlaceHolder = document.getElementById("contentholder");
oPlaceHolder.removeChild(oContentArea);
oPlaceHolder.appendChild(oClone);
}
Cela semble une assez mauvaise façon de le faire. Personne ne sait la "bonne" façon de changer la page intégrée?
Merci!
MODIFIER: En réponse aux réponses ci-dessous, voici la totalité du code source de la page je suis maintenant en utilisant. À l'aide de la setAttribute ne semble pas modifier le contenu de la balise Object.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test</title>
<script language="JavaScript">
function doPage()
{
var objTag = document.getElementById("contentarea");
if (objTag != null)
{
objTag.setAttribute('data', 'Test2.html');
alert('Page should have been changed');
}
}
</script>
</head>
<body>
<form name="Form1" method="POST">
<p><input type="button" value="Click to change page" onclick="doPage();" /></p>
<object style="visibility: visible; border: none;" standby="loading data" id="contentarea" title="loading" width="100%" height="53%" type="text/html" data="test1.html"></object>
</form>
</body>
</html>
L'Test1.html et Test2.html les pages sont de simples pages HTML contenant le texte 'Test1' et 'Test2', respectivement.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire avec setAttribute
EDIT:
Il est également recommandé que vous utilisez la fenêtre.onload pour s'assurer que le DOM est chargé, sinon vous ne serez pas en mesure d'accéder à des objets à l'intérieur.
Il pourrait être quelque chose comme ceci:
Vous pouvez en savoir plus sur la fenêtre.onload ici
setAttribute()
ne fonctionne pas pour moi non plus. La valeur ne change pas dans le dom inspector, mais le rendu du contenu de la<object>
balise n'est pas mise à jour.setAttribute
a fonctionné comme un charme!! Bien que j'ai été en utilisant cette méthode pour afficher un document PDF.Cela semble être un bug lié au navigateur,
setAttribute()
devrait fonctionner. J'ai trouvé cette solution de contournement, qui semble fonctionner dans tous les navigateurs:Les solutions ci-dessus ne fonctionne pas correctement dans Firefox, la balise d'Objet n'est pas de rafraîchissement pour une raison quelconque. Mon objet tags afficher les images SVG.
Ma solution de travail pour cet été afin de remplacer l'Objet nœud avec un clone:
Voici comment j'ai enfin atteint. Vous pouvez faire
ou peut-être
L'Objet d'un élément a un "readyState' une propriété qui peut être utilisé pour vérifier si le contenu de la page est "chargement" ou "complète".
object.location
etobject.parentWindow
ne sont pas définis.J'ai trouvé une solution très simple qui fonctionne également en Chrome. Le truc, c'est de faire d'un objet (ou d'un élément parent) invisible, de modifier les données d'attribut, puis faire l'objet de nouveau visible.
Dans le code ci-dessous, il est supposé que object_element est l'élément object et parent_element est le parent et l'url est l'url des données.
Suivantes user2802253, j'utilise celui-ci sur Safari et Firefox, ce qui oblige également un redessiner. (désolé, pas assez de réputation pour poster comme un simple commentaire).
Je pense que c'est la meilleure façon d'atteindre votre objectif.
Html:
Js:
travaillé sur la version Chrome 54 et Safari, mais ne fonctionne pas sur IE 11
ce qui a fonctionné sur tous
$('#myob').html($('#myob').html());
Modification de l'attribut de données devrait être facile. Cependant, il peut ne pas fonctionner parfaitement sur tous les navigateurs.
Si le contenu est toujours en HTML pourquoi ne pas utiliser un iframe?
Antoher façon de le faire, vous pourriez intégrer l'objet dans un DIV
JS:
Actualise objet dans la Version Chrome 42.0.2311.90 m
la raison principale de ce problème est l'utilisation de "/" dans les fichiers locaux.
Cet extrait a fait le travail dans mon cas