Gerçek bir çözüm bulmayı başardım, çünkü Safari 5.1'de showModalDialog()
desteğini ekledi. Çok uygun, bu.
Birincisi, bu içeriğe sahip bir dosya oluşturmak: O
<html>
<head>
<title>Prompt</title>
<script type="text/javascript">
function a(){
if(window.dialogArguments.length > 0)
document.getElementById('a').textContent = window.dialogArguments[0]+'\n\n';
if(window.dialogArguments.length > 1)
document.getElementById('b').value = window.dialogArguments[1];
document.getElementById('b').focus();
}
function s(b){
window.returnValue=b?document.getElementById('b').value:null;
window.close();
}
function kp(e){
if(!e.DOM_VK_ENTER) e.DOM_VK_ENTER=13;
if(!e.DOM_VK_RETURN) e.DOM_VK_RETURN=13;
if(!e.DOM_VK_ESCAPE) e.DOM_VK_ESCAPE=27;
switch(e.keyCode){
case e.DOM_VK_ENTER:
case e.DOM_VK_RETURN:
if(e.preventDefault) e.preventDefault();
if(e.stopPropagation) e.stopPropagation();
e.returnValue = false;
e.cancelBubble = true;
s(1);
return false;
case e.DOM_VK_ESCAPE:
if(e.preventDefault) e.preventDefault();
if(e.stopPropagation) e.stopPropagation();
e.returnValue = false;
e.cancelBubble = true;
s(0);
return false;
default:
return true;
}
}
</script>
<body style="text-align:center;white-space:pre-wrap" onload="a()">
<span id="a"></span>
<input type="text" id="b" onkeydown="return kp(event)" /><input type="button" value="Ok" onclick="s(1)" /><input type="button" value="Cancel" onclick="s(0)" />
</body>
</html>
, Safari'nin kırık sürümleri için (bir istem haşhaş ve vurmak için kullanıcı sormadan bu özelliği algılama için hiçbir yol var gibi görünüyor yukarıda oluşturulan doğru yola yolunu /js/safari-5.1-bugfix.html
değiştirmek tabii
(function(){
if(window.console && window.console.log)
window.console.log('Applying bugfix for Safari 5.1\'s prompt()');
var oldprompt = window.prompt;
window.prompt = function() {
return showModalDialog(location.protocol+'//'+location.host+'/js/safari-5.1-bugfix.html', arguments);
};
window.prompt.$orig = oldprompt;
})();
: muhtemelen bir kullanıcı aracısı denetimi yapmak gerekecek böylece window.prompt
değiştirmek için aşağıdaki Javascript yürütmek,), "İptal" Sunucunuzdaki HTML dosyası. Ne yazık ki, bir data:
URI, Safari'nin başka bir hataya sahip olduğunu ve window.dialogArguments
değerini kaybettiğini ve data:
URI'leri için iletişim kutuları için window.returnValue
öğelerini göz ardı edemeyiz.
prompt()
'u normalde kullandığınız gibi kullanabilirsiniz.
Güzel, teşekkürler! – Bibou