ExecCommand no funciona en Opera
-
24-10-2019 - |
Pregunta
Tengo este código, ExecCommand para Bold, y no funciona bajo Opera. ¿Alguien tiene alguna idea de por qué? Gracias
<script type="text/javascript">
function SetToBold () {
Editor.execCommand ('bold', false, null);
}
function start() {
frames.iView.document.designMode = "On";
var myIFrame = document.getElementById("iView");
browser = navigator.appName;
if (document.all) { //IE
var iframe_window = window.frames["iView"];
iframe_window.document.body.focus();
}
else { //Firefox
field = myIFrame.contentWindow.document.getElementsByTagName("body")[0];
setTimeout("field.focus()",250);
}
if (browser == "Netscape") {
Editor = myIFrame.contentWindow.document;
Editor.designMode = 'On';
Editor.body.contentEditable = 'true';
}
else if(browser == "Microsoft Internet Explorer") {
frames['iView'].document.designMode='On';
Editor = frames['iView'].document;
}
}
Llamo a la función de inicio con el cuerpo en carga. Está bien Firefox e IE, pero no funciona en Opera. ¿Alguien sabe algunas restricciones de ExecCommand en Opera? Gracias
Solución
En el script citado, la variable "editor" recibe un valor solo dentro de la sección de olfateo del navegador. En Opera, el "editor" estará indefinido y, por lo tanto, tratar de hacer "editor.execCommand ()" lanzará un error.
Más bien que
if (browser == "Netscape") {
Editor = myIFrame.contentWindow.document;
Editor.designMode = 'On';
Editor.body.co`enter code here`ntentEditable = 'true';
}
else if(browser == "Microsoft Internet Explorer") {
frames['iView'].document.designMode='On';
Editor = frames['iView'].document;
}
Deberías dejar caer el navegador olfateando y hacer algo como
if ( myIFrame && myIFrame.contentWindow ) {
Editor = myIFrame.contentWindow.document;
Editor.designMode = 'On';
}
else if( frames['iView'] ) {
frames['iView'].document.designMode='On';
Editor = frames['iView'].document;
}
Espero que ayude :)
Otros consejos
Antes de dar una respuesta, quiero estar seguro de lo que está preguntando. El script está probando Netscape o IE. Apertura libélula Consola, puede descubrir los valores de su script. Tengo la sensación de que también tendrás dificultades con WebKit.
>>> var browser = navigator.appName
undefined
>>> browser
"Opera"
He notado que las versiones más nuevas de Opera aparecen como Netscape cuando lo pides con Navigator.appname. Recuerdo que no siempre fue así porque también obtuve algunos "IF" mayores alrededor de mi fuente donde usé el nombre regular. No puedo decir que cuando esto sea, solo digo.