这是一个示例代码:
HTML
<script> alert('This is alert!') </script>
Run Code Online (Sandbox Code Playgroud)
JS
window.alert = function(data) //alert() over-riding
{
scriptObject = document.currentScript; //gives me <script> object
}
Run Code Online (Sandbox Code Playgroud)
更新:在Internet Explorer 11.420.10586.0中,上面的代码现在似乎不起作用(它更早用,IE的兼容性已删除).为什么它能够在Chrome,Firefox,Safari和Microsoft Edge中找到Script对象,但在Internet Explorer中却找不到?还有其他方法吗?
问题:
HTML
<script> ReferenceError.prototype.__defineGetter__('name', function fff() { javascript:alert(1) }),x </script>
Run Code Online (Sandbox Code Playgroud)
JS
window.alert = function(data) //alert() over-riding
{
scriptObject = ? // I need to get the Script object
}
Run Code Online (Sandbox Code Playgroud)
我试图arguments.callee.caller找到fff(),但无法捕获脚本对象.
对于上述脚本,Alert()不会在Chrome中执行.请改用Firefox.我无法在任何浏览器中获取脚本对象.
有解决方案吗?
我有这个代码:
<a href="javascript:alert('something1')">Click</a>
<a href="javascript:prompt('something2')">Click</a>
<a href="javascript:alert('something3')">Click</a>
<a href="javascript:prompt('something4')">Click</a>
Run Code Online (Sandbox Code Playgroud)
为了获取单独的集合元素,我使用document.querySelectorAll("a[href^='javascript:alert(");和document.querySelectorAll("a[href^='javascript:prompt");。
现在,如何使用泛型来获取包含警报和提示的document.querySelectorAll()所有此类元素?<a href
我试过这个:
document.querySelectorAll("a[href^='javascript:prompt(,a[href^='javascript:alert(");
document.querySelectorAll("a[href^='javascript:prompt(","a[href^='javascript:alert(");
还有这么多。但它不起作用,出现"DOMException - not a valid selector"错误。
有什么帮助吗?
我有这个代码:
<a href="javascript:alert('something1')">Click</a>
<a href="javascript:prompt('something2')">Click</a>
<a href="javascript:alert('something3')">Click</a>
<a href="javascript:prompt('something4')">Click</a>
Run Code Online (Sandbox Code Playgroud)
现在,使用console.log(document.querySelectorAll("a[href^='javascript:prompt('],a[href^='javascript:alert(']"));将获取所有这些元素作为NodeList.
但是,我有不同的字母大小写的HTML文本javascript.也就是说,看下面的代码:
<a href="javaSCRIPT:alert('something1')">Click</a>
<a href="JaVaScRIPt:prompt('something2')">Click</a>
<a href="javaSCRIpt:alert('something3')">Click</a>
<a href="JAVAscrIPt:prompt('something4')">Click</a>
Run Code Online (Sandbox Code Playgroud)
我提到了这个,但使用*=而不是^=没有帮助.我知道^=等同于'开头',但是什么*=意思?
如何querySelectorAll为所有这些排列编写通用的javascript?
我想覆盖console.log方法以在调用时调用一组任务console.log。我提到了其他 Stackoverflow 答案,但这给了我错误:
未捕获的 RangeError:超出最大调用堆栈大小。
这就是我想要做的:
backupconsolelog = console.log;
console.log = function(arguments)
{
//do my tasks;
backupconsolelog(arguments);
}
Run Code Online (Sandbox Code Playgroud)
更新 1:不知何故成功地覆盖了 console.log,但我现在无法console.log(displaySomethingInConsole)在覆盖完成的同一个 .js 文件中执行。这以某种方式导致递归调用console.log,并再次给出Uncaught RangeError: Maximum call stack size exceeded.
如何在同一个 .js 文件中使用 console.log()?
更新 2:我有一个check()由 overrided 调用的函数console.log。但是,函数console.log内部有一个调用check()导致Maximum call stack size exceeded.错误。
更新 3:再次出错!:(
未捕获的类型错误:非法调用
var _log = window.console.log;
window.console.log = function () {
_log.apply(this, arguments);
check();
};
_log("aaa"); …Run Code Online (Sandbox Code Playgroud) 参考答案:https : //stackoverflow.com/a/38399344/5132413
请参考我的问题,上面链接的答案仅适用于 Firefox、Chrome 和 Opera。
我做了一些研究,发现它(不区分大小写标志)不兼容。我需要 IE、Edge 和 Safari 中的等效项。
var divs = document.querySelectorAll('div[class^="foo" i]');
Run Code Online (Sandbox Code Playgroud) javascript safari internet-explorer selectors-api microsoft-edge