I am using javascript in an asp.net 2.0 site to attach events (or event listeners) to the 3 tab images in the editor (Normal, HTML, Preview). The script is called in this way:
<body onload='CE_attachEvent()'>
function CE_attachEvent()
{
// get the cute editor instance
var editor = document.getElementById('<%=Editor.ClientID%>');
//get all of the images on the editor
if (editor.all)
{
var images=editor.all.tags("IMG");
}
else
{
var images = editor.getElementsByTagName('IMG');
}
var len=images.length;
for(var i=0;i<len;i++)
{
var img=images
;
var imgsrc = img.src.toString();
//if the image is one of the tab images, call the addEvent function
if(imgsrc.indexOf('design.gif')!=-1 | imgsrc.indexOf('htmlview.gif')!=-1 | imgsrc.indexOf('preview.gif')!=-1)
{
addEvent(img,'click',HandleIEChange);
}
}
}
function addEvent(obj,type, fn)
{
//if browser is IE or supports the IE attachEvent
if (obj.attachEvent)
{
obj['e'+type+fn] = fn;
obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
obj.attachEvent('on'+type, obj[type+fn] );
}
//non IE browsers
else
{
obj.addEventListener(type,HandleNonIEChange(obj.title),false);
}
}
This script works perfectly in IE on the PC using the attachEvent method and in Firefox on the PC using the addEventListener method. Everything I've found says Safari supports the addEventListener method, but when this same page loads in Safari there are several issues. First is there is no content on any tab as there is in all the other browsers. Secondly, I am unable to type in the Normal view. I must go to the HTML tab, type something, then I can go back to the Normal and I can type.
The HandleIEChange, and HandleNonIE change methods which call a server side method are listed below.
function HandleIEChange()
{
// get the cute editor instance
var editor = document.getElementById('<%=Editor.ClientID%>');
// get the current tab
var tab = editor.GetActiveTab();
// call serverside event via ajax
var response = EditContent.GetHtml(tab);
// set the html on the editor
editor.setHTML(response.value);
}
function HandleNonIEChange(tabName)
{
// get the cute editor instance
var editor = document.getElementById('<%=Editor.ClientID%>');
// get the current tab
var tab;
if(tabName=='Normal')
{
tab='Edit';
}
else if(tabName=='HTML')
{
tab='Code';
}
else if(tabName=='Preview')
{
tab='View';
}
// call serverside event via ajax
var response = EditContent.GetHtml(tab);
// set the html on the editor
editor.setHTML(response.value);
}
Can anyone see any reason why this won't work on the Mac the way it does on the PC?
Thanks
Roger H.