小编uni*_*oot的帖子

在HTML中查找currentScript

这是一个示例代码:

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.我无法在任何浏览器中获取脚本对象.

有解决方案吗?

html javascript overriding

6
推荐指数
1
解决办法
435
查看次数

多个值的 document.querySelectorAll()

我有这个代码:

<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"错误。

有什么帮助吗?

html javascript selectors-api

3
推荐指数
1
解决办法
6154
查看次数

忽略querySelectorAll中的区分大小写

我有这个代码:

<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

html javascript anchor selectors-api

3
推荐指数
1
解决办法
1662
查看次数

在 JavaScript 中覆盖 console.log

我想覆盖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)

javascript overriding console.log

2
推荐指数
1
解决办法
3362
查看次数

document.querySelectorAll 在 IE、Edge 和 Safari 中的兼容性

参考答案: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

0
推荐指数
1
解决办法
2522
查看次数