मैंने वास्तविक कामकाज के साथ आने में कामयाब रहा है, क्योंकि सफारी ने 5.1 में showModalDialog()
के लिए समर्थन जोड़ा है। बहुत सुविधाजनक, वह।
सबसे पहले, इस सामग्री के साथ एक फ़ाइल बनाने:
<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>
फिर, सफारी के टूटे संस्करणों के लिए (वहाँ एक शीघ्र अप पॉपिंग और हिट करने के लिए उपयोगकर्ता से पूछे बिना इस सुविधा-पता लगाने के लिए कोई रास्ता नहीं हो रहा है "रद्द करें", तो आप शायद एक उपयोगकर्ता-एजेंट की जांच करना होगा), window.prompt
को बदलने के लिए निम्नलिखित जावास्क्रिप्ट निष्पादित करें:
(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;
})();
बेशक
, करने के लिए ऊपर से बनाए गए सही पथ के लिए पथ /js/safari-5.1-bugfix.html
बदल अपने सर्वर पर एचटीएमएल फ़ाइल। दुर्भाग्यवश, हम data:
URI का उपयोग नहीं कर सकते हैं क्योंकि सफारी के पास अन्य बग है जहां यह window.dialogArguments
खो देता है और यूआरआई के साथ संवाद के लिए window.returnValue
को अनदेखा करता है।
आप तब सामान्य रूप से prompt()
का उपयोग कर सकते हैं।
अच्छा, धन्यवाद! – Bibou