Hi Paul,
The iPhone and iPad use the same browser, mobile Safari. The RadCaptcha audio code cannot be played under mobile Safari, because the browser doesn't support <embed/> and the HTML5 <audio/> tags.
You could force download of the audio file when the user clicks to play the audio, if the browser does not support these tags. This can be done with the following custom JavaScript code. Please paste it below your ScriptManager control on the page where the RadCaptcha resides:
<script type="text/javascript">
Telerik.Web.UI.RadCaptcha.prototype._createAudioElements = function ()
{
var audioUrl = this.get_audioUrl();
var audioLink = this.get_audioLink();
$addHandlers(audioLink, { "click": this.onAudioPlay }, this);
var element = audioLink.parentNode;
this._audioElement = this._createAudioElement(audioUrl);
element.appendChild(this._audioElement);
// Opera 10, Safari 4 and Firefox 3.5 support WAV, but Chrome 3 doesn't.
// IE6,7 and 8 do not support <audio/>
var doesNotSupportAudio = (!this._supportsAudio() || (this._audioElement && this._audioElement.canPlayType && !this._audioElement.canPlayType("audio/wav")));
if (doesNotSupportAudio)
{
var _qtInstalled = IsQTInstalled();
if (_qtInstalled)
{
this._objectElement = this._createObjectElement(audioUrl);
element.appendChild(this._objectElement);
}
else
{
this.downloadFile = true;
}
}
else
{
audioLink.setAttribute('href', "#");
}
}
Telerik.Web.UI.RadCaptcha.prototype.onAudioPlay = function (e)
{
if (this._objectElement)
{
this._objectElement.Play();
}
else if (this._audioElement && this._audioElement.play)
{
//Chrome supports <audio/>, but the audio is played only once. That's why we need
//to load the audio file explicitly
if ($telerik.isChrome)
{
this._audioElement.load();
}
this._audioElement.play();
}
if (!this.downloadFile)
{
return $telerik.cancelRawEvent(e);
}
}
function IsQTInstalled()
{
var isInstalled = false;
var qtVersion = null;
if (window.ActiveXObject)
{
var control = null;
try
{
control = new ActiveXObject('QuickTime.QuickTime');
}
catch (e)
{
// Do nothing
}
if (control)
{
// In case QuickTimeCheckObject.QuickTimeCheck does not exist
isInstalled = true;
}
try
{
// This generates a user prompt in Internet Explorer 7
control = new ActiveXObject('QuickTimeCheckObject.QuickTimeCheck');
}
catch (e)
{
return isInstalled;
}
if (control)
{
// In case QuickTime.QuickTime does not exist
isInstalled = true;
// Get version
qtVersion = control.QuickTimeVersion.toString(16); // Convert to hex
qtVersion = qtVersion.substring(0, 1) + '.' + qtVersion.substring(1, 3);
qtVersion = parseFloat(qtVersion);
}
}
else
{
// Check navigator.plugins for "QuickTime Plug-in"
if (navigator.plugins)
{
for (i = 0; i < navigator.plugins.length; i++)
{
if (navigator.plugins[i].name.indexOf("QuickTime") >= 0)
{
isInstalled = true;
}
}
}
}
return isInstalled;
}
</script>
All the best,
Pero
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their
blog feed now.