1

我有这个代码,粗体的 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;
    }


}

我用 body onload 调用 start 函数。Firefox 和 ie 都可以,但在歌剧中不起作用。有人知道歌剧中 execcommand 的一些限制吗?谢谢

4

3 回答 3

2

在引用的脚本中,变量“Editor”仅在浏览器嗅探部分内被赋予一个值。在 Opera 中,“Editor”将是未定义的,因此尝试执行“Editor.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;
}

希望有帮助:)

于 2011-01-25T02:52:55.640 回答
1

在给出答案之前,我想确定你在问什么。该脚本正在测试 Netscape 或 IE。打开蜻蜓控制台,您可以发现脚本的值。我感觉你在使用 Webkit 时也会遇到困难。

>>> var browser = navigator.appName
undefined
>>> browser
"Opera"
于 2011-01-24T19:05:15.857 回答
0

我注意到,当您使用 navigator.appName 请求时,较新版本的 Opera 会显示为 NETSCAPE。我记得并非总是如此,因为我在我使用常规名称的来源周围也有一些较旧的“ifs”。不能说从什么时候开始,只是说。

于 2014-02-05T14:06:16.790 回答