2011-01-24 4 views
1

У меня есть этот код, execcommand для BOLD, и он не работает под оперой. у кого-нибудь есть идея, почему? благодаряexeccommand не работает в opera

<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; 
    } 


} 

я называю начальную функцию с OnLoad тела. это нормально firefox и т. д., но не работает в опере. Кто-нибудь знает о некоторых ограничениях execcommand в опере? спасибо

+0

Скорее всего, ваш браузер обнюхивает здесь. Opera не является ни «Netscape», ни «Microsoft Internet Explorer» ... navigator.appName == «Opera» в Opera, поэтому вы не включили designMode для Opera. – miketaylr

ответ

2

В цитируемом скрипте переменной «Редактор» присваивается значение только внутри секции обхода браузера. В Opera «Редактор» будет неопределенным и, следовательно, попытка «Редактор.execCommand()» выдает ошибку.

Вместо

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; 
} 

вы должны отказаться от браузера нюхает и сделать что-то вроде

if (myIFrame && myIFrame.contentWindow) { 
    Editor = myIFrame.contentWindow.document; 
    Editor.designMode = 'On'; 
} 
else if(frames['iView']) { 
    frames['iView'].document.designMode='On'; 
    Editor = frames['iView'].document; 
} 

Надежда, что помогает :)

+0

да, это была проблема, спасибо :) – mmm

1

перед тем как дать ответ. Я хочу быть уверенным в том, что вы просите. Сценарий тестирует Netscape или IE. Открывая консоль dragonfly, вы можете узнать значения своего сценария. У меня такое чувство, что у вас тоже будут проблемы с Webkit.

>>> var browser = navigator.appName 
undefined 
>>> browser 
"Opera" 
+0

navigator.appName также относится к «Netscape» в браузерах WebKit:/ – miketaylr

+0

hehe webkit затеняет себя. – karlcow

0

ив отметили, что новые версии опер появляются как NETSCAPE когда вы запрашиваете его с navigator.appName. я помню, что это было не всегда так, потому что я также получил несколько старых «ifs» вокруг моего источника, где я использовал обычное имя. не могу сказать, когда это так, просто говорю.

Смежные вопросы