w3schools property img attribute javascript browser theory

javascript - property - Recuperación de métodos integrados que se han sobrescrito



title label html (1)

var iframe = document.createElement("iframe"); document.documentElement.appendChild(iframe); var _window = iframe.contentWindow; String.prototype.split = _window.String.prototype.split; document.documentElement.removeChild(iframe);

Use iframes para recuperar métodos de objetos host.

Tenga en cuenta que hay trampas con este método.

"foo".split("") instanceof Array // false "foo".split("") instanceof _window.Array // true

La mejor manera de arreglar esto es no usar instanceof , nunca.

También tenga en cuenta que var _split = String.prototype.split como una etiqueta <script> antes de la secuencia de comandos traviesa o no incluye la secuencia de comandos traviesa es obvio una solución mucho mejor.

Digamos que nuestro script está incluido en una página web, y un script anterior (que ya se ejecutó) hizo esto:

String.prototype.split = function () { return ''U MAD BRO?''; };

Por lo tanto, el método de cadena split se ha sobrescrito.

Nos gustaría utilizar este método, por lo que debemos recuperarlo de alguna manera. Por supuesto, podríamos simplemente definir nuestra propia implementación de este método y usar eso en su lugar. Sin embargo, por el bien de esta pregunta, digamos que realmente queríamos recuperar la implementación del navegador de ese método.

Entonces, el navegador tiene una implementación del método de split (en código nativo, creo), y esta implementación se asigna a String.prototype.split cada vez que se carga una nueva página web.

¡Queremos esa implementación! Lo queremos de vuelta en String.prototype.split .

Ahora, ya se me ocurrió una solución: es un truco, y parece estar funcionando, pero puede tener fallas, tendría que probar un poco ... Así que, mientras tanto, ¿pueden encontrar una solución? a este problema?