捕获锚标签

时间:2016-07-01 16:10:49

标签: javascript html override

我编写了一个覆盖本机alert()方法的JavaScript代码。 我需要捕获包含alert()执行代码的HTML元素。 前两个案例就是例子。我在console.log中打印了元素。

案例1 - 捕获<script>代码:

HTML: <script> alert(1); </script>

JS:

window.alert = function()
{ 
    console.log(document.currentScript); // <script> is printed
}

案例2 - 捕获<img>代码:

HTML: <img src='1' onerror="alert(1)">

JS:

window.alert = function()
{ 
    console.log(arguments.callee.caller.arguments[0].target);
    // arguments.callee --> console.log()
    // arguments.callee.caller --> onerror(event) {}
    // arguments.callee.caller.arguments[0] --> event
    // arguments.callee.caller.arguments[0].target --> <img>
}

案例问题 - 捕获<a>代码:

HTML: <a href="javascript:alert(1);">Click here for alert</a>

JS:

window.alert = function()
{ 
    console.log( // how to find <a> element) 
}

请不要建议我通过包含<a>或类似内容的ID来修改HTML。考虑到HTML纯粹是静态的,我不能修改任何东西。我可以添加一个JavaScript,我只是想知道如何做到这一点。

3 个答案:

答案 0 :(得分:1)

您可以找到此类提醒并将其转换为点击事件。像这样的东西。请注意,点击事件警报调用可能会变得更加复杂,并可能使用eval(),但我会留下您的风险。

&#13;
&#13;
library(survival)
library(ranger)

## Split the data
n <- nrow(veteran)
idx <- sample(n, 2/3*n)
train <- veteran[idx, ]
test <- veteran[-idx, ]

## Grow RF and predict
rf <- ranger(Surv(time, status) ~ ., train, write.forest = TRUE)
preds <- predict(rf, test)

## Example CHF plot
plot(preds$unique.death.times, preds$chf[1, ])

## Example survival plot
plot(preds$unique.death.times, preds$survival[1, ])
&#13;
importance = "impurity"
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以在load使用window活动;选择器click上的"a[href='javascript:alert(1);']"事件获取href属性的值;在event.preventDefault()处理程序中调用click; String.prototype.match()创建具有href属性的值数组;全局定义匹配; new Function(); Function.prototype.call()this设置为<a>元素;在.click()

返回的匹配参数的选择器<a>元素上调用.match()

window.alert = function() {
  console.log(arguments, this)
}

window.addEventListener("load", function() {

  a = document.querySelector("a[href='javascript:alert(1);']");
  a.addEventListener("click", function(event) {
    event.preventDefault();
    var data = this.href.replace(/javascript/, "");
    matches = data.match(/\w+(?=\()|(\(.*\))/g);
    matches[1] = matches[1].replace(/\(|\)/g, "");
    var fn = new Function(matches[0] + ".call(a, matches[1])");
    fn();
  });

  a.click();

});
<a href="javascript:alert(1);"></a>

答案 2 :(得分:0)

不要使用href属性来调用JavaScript。应该避免。不推荐使用。请改用onclick事件。见这里:https://stackoverflow.com/a/10242595/5969411

<script>
    window.alert = function(msg, element) {
        console.log('Msg:', msg);
        console.log('Element:', element);
    };
</script>
<a href="#" onclick="alert(1, this);return false;">Test 1</a>
<a href="#" onclick="alert(2, this);return false;">Test 2</a>
<a href="#" onclick="alert(3, this);return false;">Test 3</a>

我已经从上面的onclick事件返回false,以便压制锚点进入&#39;#&#39; URL指令,但如果您愿意,可以在此处轻松返回true。