11
votes

Execcommand ("INSERTHTML", ...) dans Internet Explorer

Je construis un éditeur WYSIWYG avec un iframe modifiable à l'aide document.execCommand () code>. Maintenant, je dois utiliser le "insertHTML" commande code> qui fonctionne parfaitement dans Chrome et Firefox, mais bien sûr, il ne fonctionne pas dans Internet Explorer:

p>

<div contenteditable id="target">contenteditable</div>
<button onclick="run()">contenteditable.focus() + document.execCommand("insertHTML", false, "&lt;b>ins&lt;/b>")</button>


1 commentaires

CES Rapports de bogues implique que EDGE prend en charge EXECCOMMAND (" INSERTHTML ", ..) bizarre).


4 Réponses :


15
votes

dans IE <= 10 Vous pouvez utiliser la méthode pastéhtml du Textrange représentant la sélection: xxx

update

dans IE 11, document.selection.selection est parti et INSERTHTML n'est toujours pas pris en charge, vous aurez donc besoin de quelque chose comme ce qui suit :

https://stackoverflow.com/a/6691294/96100 < / p>


3 commentaires

Ie semble ajouter le texte au haut de la page. Une idée de la raison pour laquelle il n'est pas placé dans l'iframe spécifié par Var Doc?


@Tundoopani: Pas sans plus de contexte. Avez-vous un exemple de page?


J'ai codé une version simple ici: jsfiddle.net/mwz7a/3 . Dans IE9, le contenu n'est pas placé dans l'éditeur iFrame.



3
votes

Si vous n'avez encore rien trouvé encore,

J'ai eu un bouton qui ajouterait HTML dans un iframe et causait une erreur dans IE8 lorsque j'ai cliqué sur le bouton et aucun texte n'a été sélectionné (c'est-à-dire quand j'avais le caret clignotant). Il s'est avéré que le bouton lui-même a été sélectionné (malgré la non sélectionnable = "ON"), et que JavaScript vomit l'erreur. Lorsque j'ai changé le bouton sur une DIV (avec non sélectionnable), cela fonctionnait bien, dans IE8 et FF.

J'espère que cela aide.


0 commentaires

1
votes
var doc = document.getElementById("your_iframe").contentWindow.document;

// IE <= 10
if (document.selection){
    var range = doc.selection.createRange();
        range.pasteHTML("<b>Some bold text</b>");

// IE 11 && Firefox, Opera .....
}else if(document.getSelection){
    var range = doc.getSelection().getRangeAt(0);
    var nnode = doc.createElement("b");
        range.surroundContents(nnode);
        nnode.innerHTML = "Some bold text";
};

2 commentaires

Méthode pashtml n'existe pas sur la plage objet dans mon IE9


Pour ceux qui ont le même problème, le @David Réponse est le seul qui a fonctionné pour moi.



2
votes

Je sais que c'est extrêmement vieux, mais comme c'est-à-dire que c'est-à-dire un problème, voici un meilleur moyen qui n'utilise même pas exécuteur code>.

Il manque des chèques, comme vous garantissant " Re dans le conteneur droit pour ajouter une image. P>

var sel = window.getSelection();
var range = sel.getRangeAt(0);
var frag = document.createDocumentFragment();
var img = document.createElement("img");
// add image properties here

frag.appendChild(img);
range.insertNode(frag);


2 commentaires

Même ce problème étant vieux, cette réponse est la seule qui a fonctionné pour moi. Merci en partageant vos connaissances.


@DExiang L'option facile est de ne pas se soucier de IE8 et ci-dessous. :)