ใครบ้างมีประสบการณ์กับการเอาชนะalert()
ฟังก์ชั่นใน JavaScript?
- เบราว์เซอร์ใดที่รองรับสิ่งนี้
- เวอร์ชันของเบราว์เซอร์ใดที่รองรับสิ่งนี้
- สิ่งที่เป็นอันตรายในการเอาชนะฟังก์ชั่น?
_alert
การขยายชั่วคราวในครั้งแรก
ใครบ้างมีประสบการณ์กับการเอาชนะalert()
ฟังก์ชั่นใน JavaScript?
_alert
การขยายชั่วคราวในครั้งแรก
คำตอบ:
แน่นอน "สนับสนุน" มันเป็นหน้าเว็บของคุณคุณทำสิ่งที่คุณต้องการด้วย
ฉันทำสิ่งนี้แล้วเพื่อติดตามเหตุการณ์การวิเคราะห์โดยไม่ต้องดัดแปลงห้องสมุด แต่แอบเข้าไปในเหตุการณ์
ใช้รูปแบบพร็อกซี:
(function(proxied) {
window.alert = function() {
// do something here
return proxied.apply(this, arguments);
};
})(window.alert);
คุณสามารถเลี่ยงการเรียกไปยังฟังก์ชั่นดั้งเดิมได้หากต้องการ (พร็อกซี)
ข้อมูลเพิ่มเติมที่นี่: JQuery Types #Proxy Pattern
apply()
ไม่สามารถใช้งานได้window.alert
ใน Internet Explorer 8
apply
เป็นวิธีการของFunction
วัตถุ ดังนั้นพวกเขาจะต้อง จำกัด อย่างชัดเจนเพื่อalert
?!
แม้ว่าเบราว์เซอร์ส่วนใหญ่จะสนับสนุนการลบล้างมัน แต่ระวังสิ่งที่คุณทำด้วย
เนื่องจากกล่องการแจ้งเตือนเริ่มต้นบล็อกเธรดการดำเนินการบางไลบรารีที่ขึ้นอยู่กับลักษณะการทำงานนี้อาจไม่ทำงานอีกต่อไป (ที่ดีที่สุด)
คุณควรเป็นพลเมืองที่ดีและหลีกเลี่ยงการสัมผัสกับ API ดั้งเดิม หากคุณเป็นเช่นนั้นคุณสามารถแยกแยะสิ่งต่างๆได้เมื่อใช้รหัสบุคคลที่สาม
แต่ถ้าคุณต้องการกำหนดพฤติกรรมการเตือนในบริบทที่เฉพาะเจาะจงคุณสามารถใส่มันด้วยฟังก์ชันที่ไม่ระบุชื่อเช่นนี้
/* new funky alert */
function myFunkyAlert(msg) {
/* here goes your funky alert implementation */
alert("Look ma!\n" + msg);
}
(function(alert) { // anonymous function redefining the "alert"
/* sample code */
alert("Hello World!");
})(myFunkyAlert);
ไม่มีอันตรายในฟังก์ชั่น Overring alert ทุกเบราว์เซอร์สนับสนุน
ตัวอย่างเช่น:
// function over riding. Redirecting to Console with Firebug installed.
function alert(message) {
console.info(message);
}
alert('This is an override.');
alert("Reloading")
แล้วโหลดหน้าเว็บซ้ำ ผู้ใช้อาจไม่เห็นข้อความแจ้งเตือน
ฉันคิดว่าการใช้งานจาวาสคริปต์ทุกครั้งจะสนับสนุนสิ่งนี้และไม่มีอันตรายใด ๆ ที่เกี่ยวข้อง โดยทั่วไปแล้วจะแทนที่กล่องการแจ้งเตือนแบบ OS ธรรมดาเป็นอะไรที่หรูหรากว่าด้วย HTML / CSS การทำเช่นนี้หมายความว่าคุณไม่จำเป็นต้องเปลี่ยนรหัสที่มีอยู่! ความจริงที่เป็นไปได้ทำให้ Javascript ยอดเยี่ยม
ดังที่กล่าวไว้ในคำตอบอื่น ๆ คุณสามารถแทนที่ฟังก์ชันด้วย
window.alert = null
หรือ
window.alert = function(){}
อย่างไรก็ตามสิ่งนี้ไม่จำเป็นต้องแทนที่ฟังก์ชั่นบนต้นแบบของตัวWindow
สร้าง (หมายเหตุเมืองหลวงW
) ดังนั้นแฮกเกอร์ยังสามารถพิมพ์:
Window.prototype.alert.apply(window, ["You were hacked!"]);
ดังนั้นคุณต้องแทนที่ฟังก์ชันนั้นด้วย:
Window.prototype.alert = null
หรือ
Window.prototype.alert = function(){}
Ladislav
สำหรับ IE8 คุณสามารถกำหนดการแจ้งเตือนใหม่ () เช่นนี้ได้
/**
* Definition of global attached to window properties <br/>
*/
(function() {
nalert = window.alert;
Type = {
native: 'native',
custom: 'custom'
};
})();
/**
* Factory method for calling alert().
* It will be call a native alert() or a custom redefined alert() by a Type param.
* This defeinition need for IE
*/
(function(proxy) {
proxy.alert = function () {
var message = (!arguments[0]) ? 'null': arguments[0];
var type = (!arguments[1]) ? '': arguments[1];
if(type && type == 'native') {
nalert(message);
}
else {
document.write('<h1>I am redefiend alert()<br/>Alert say: '+message+'</h1>');
}
};
})(this);
และโทรเป็น
alert('Hello, hacker!');
nalert('I am native alert');
alert('Hello, user!', Type.custom);
ประสบการณ์ของฉันกับฟังก์ชั่นการแจ้งเตือนที่เอาชนะ () คือเราเคยใช้มันเพื่อ "แฮ็ค" เวอร์ชันทดลองของไลบรารี JavaScript ที่แสดง "กรุณาลงทะเบียน!" หน้าจอจู้จี้ผ่านการแจ้งเตือนเป็นครั้งคราว
เราเพิ่งกำหนดฟังก์ชั่น alert () และ voila ของเราเอง
มันมีวัตถุประสงค์เพื่อการทดสอบเท่านั้นเราซื้อเวอร์ชันเต็มในภายหลังดังนั้นจึงไม่มีอะไรผิดศีลธรรมเกิดขึ้นที่นี่ ;-)
การใช้งานจาวาสคริปต์ทั้งหมดในเบราว์เซอร์สมัยใหม่รองรับการแทนที่
อันตรายค่อนข้างง่ายที่คุณจะผลักดันสมาชิกในทีมคนอื่นอย่างบ้าคลั่งโดยเอาชนะฟังก์ชั่นที่รู้จักกันทั่วไปเช่นการแจ้งเตือน ()
ดังนั้นหากคุณไม่ได้ใช้งานฟังก์ชั่นเป็นเครื่องมือในการดีบักหรือแฮกรหัสที่มีอยู่ในบางวิธีฉันไม่เห็นเหตุผลที่จะทำ เพียงแค่สร้างฟังก์ชั่นใหม่
มันทำงานได้ดีใน firefox และ ie8 ฉันไม่เห็นว่าจะมีเบราว์เซอร์ใดที่ไม่ทำงานนี่เป็นพื้นฐานที่ค่อนข้างมากของวิธีการใช้งานจาวาสคริปต์แม้ว่าจะไม่เห็นบ่อยครั้งที่มันใช้กับฟังก์ชันดั้งเดิมเช่นนั้น =)
แฮ็คอย่างรวดเร็วที่ฉันทำเพื่อค้นหาว่าการเตือนมาจากที่ใดให้ไปที่คอนโซลแล้วป้อนสิ่งนี้
function alert(message) {
console.info(message);
debugger;
}
เมื่อพูดถึงฟังก์ชั่นเบราว์เซอร์ js window.alert
มีชื่อเสียงและเป็นที่รู้จักมากที่สุดคนที่ไม่รู้จัก js รู้alert()
- มั่นใจได้ว่ามันรองรับเบราว์เซอร์ทั้งหมดที่ใช้อยู่ในปัจจุบันและข้อมูลโค้ดของคุณก็เป็นเช่นกัน อย่างไรก็ตามฉันจะไม่แทนที่ (เช่นนี้เป็นเหมือน refactoring แทนที่จะแทนที่ในความหมาย OOP) alert()
สำหรับกรณีการใช้งานเฉพาะเป็นของคุณเพราะเมื่อคุณจำเป็นต้องใช้alert()
โดยไม่มีเท็มเพลตและคุณอาจจะต้อง อีกฟังก์ชั่นที่ไม่แจ้งเตือนให้ทำเช่นนั้น
ฉันต้องเผชิญกับข้อกำหนดในการแสดงข้อความเริ่มต้นพร้อมกับข้อความแจ้งเตือนจริง นี่คือวิธีที่ฉันจัดการเพื่อทำมัน
const actualAlertFunc = window.alert;
window.alert = function(msg) {
actualAlertFunc('some default message '+ msg);
}
ฉันทดสอบมันด้วยโครเมียมแล้ว ฉันไม่แน่ใจว่ามันเป็นการปฏิบัติที่ดี แต่มันทำหน้าที่ตามวัตถุประสงค์