Man*_*nne 5 javascript wysiwyg internet-explorer tinymce
我有一个问题如下:我们在我们的应用程序中使用了一个富文本编辑器(TinyMCE,但这在我看来并不重要).现在,使用Internet Explorer 8,我们注意到如果您输入的内容看起来像一个网址:
www.google.com
... IE通过一些本机到浏览器功能帮助将其转换为链接.现在,如果你真的想把它变成一个链接,并选择编辑链接属性,并将href设置为
www.google.com/analytics
...然后当javascript设置锚标记的href属性时,链接的文本也会发生变化.期望的结果是:
`<a href="http://www.google.com/analytics">www.google.com</a>`
Run Code Online (Sandbox Code Playgroud)
但实际上是:
`<a href="http://www.google.com/analytics">www.google.com/analytics</a>`
Run Code Online (Sandbox Code Playgroud)
有没有人知道解决这个问题的方法?
更新:仅在Internet Explorer 8和7中观察到此行为.Firefox,Chrome和Safari不受影响.这个问题也可以在TinyMCE网站http://tinymce.moxiecode.com/examples/full.php上观察到,所以它可能不是TinyMCE配置问题.
经过一些研究和调试,我发现问题是由Internet Explorer的内置行为引起的.在设置链接的href-property时会发生这种情况,该链接的文本内容似乎是一个URL(根据IE).在这些情况下,IE href
会将-attribute 的内容复制到链接文本中.
可能有几种解决方法,但我发现至少这个逻辑有效:
innerHTML
到临时变量中,href
像往常一样设置属性innerHTML
已更改,innerHTML
则从临时变量中复制原始文件.这似乎有效,因为更改innerHTML
链接不会导致更改href
属性.
在tinyMCE中,在advlink插件的functions.js的setAllAttribs()中找到以下行:
setAttrib(elm, 'href', href);
Run Code Online (Sandbox Code Playgroud)
...并用这个怪物替换它:
if(tinyMCE.isMSIE) {
var tmp = elm.innerHTML;
setAttrib(elm, 'href', href);
if(elm.innerHTML != tmp) // optional, but keeps unnecessary innerHTML set:s away
elm.innerHTML = tmp;
}
else {
setAttrib(elm, 'href', href);
}
Run Code Online (Sandbox Code Playgroud)
......并且您的链接看起来好像没有动过.我还在tinyMCE论坛上开始讨论这个问题.如果他们对我的解决方案发布了一些改进或者说它是胡说八道,我也会更新这个问题.
归档时间: |
|
查看次数: |
2416 次 |
最近记录: |