Ala*_*orm 14 javascript google-chrome google-chrome-devtools
我正在处理一个系统,其中在页面的早期正在执行以下Javascript代码(这是我无法控制的)
if (!("console" in window) || !("firebug" in console))
{
var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
"group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {}
}
Run Code Online (Sandbox Code Playgroud)
此代码似乎用于创建模拟console对象,以防止在没有JavaScript控制台的环境中出现javascript错误.这很棒,但它也阻止了谷歌Chrome控制台的运行.条件firebug明确地检查,但就是这样
if (!("console" in window) || !("firebug" in console))
Run Code Online (Sandbox Code Playgroud)
那么,有没有办法告诉Chrome的调试器重新初始化其控制台对象?也就是说,用简单的英语告诉Chrome
嘿,你知道当你加载一个页面并定义一个控制台对象供我使用吗?再次这样做,以便我们可以覆盖用户空间中的某个人所做的事情.
我意识到我可以做类似的事情
console.firebug = "faketrue";
Run Code Online (Sandbox Code Playgroud)
并且条件被捕获,但我在系统中受到限制,并且在上述控制台重新定义命中之前没有办法添加javascript.换句话说,不,我不能只是在头部开始后添加一些javascript代码.
Jar*_*ish 17
我相信你可以使用iframe注入然后复制iframe的控制台对象:
<script type="text/javascript">
console = {};
try {
console.log('1');
} catch(e){
alert('No console');
}
</script>
<iframe id="text"></iframe>
<script type="text/javascript">
console = window.frames[0].console;
try {
console.log('test');
} catch(e){
alert('No console');
}
</script>
Run Code Online (Sandbox Code Playgroud)
请注意,这只是该概念应该起作用的证明.
编辑
使用纯JS iframe:
<script type="text/javascript">
console = {};
try {
console.log('1');
} catch(e){
alert('No console');
}
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
console = window.frames[0].console;
try {
console.log('test');
} catch(e){
alert('No console');
}
</script>
Run Code Online (Sandbox Code Playgroud)
编辑
当然,如果您之后需要删除iframe元素:
<script type="text/javascript">
console = {};
try {
console.log('1');
} catch(e){
alert('No console');
}
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
console = window.frames[0].console;
try {
console.log('test');
} catch(e){
alert('No console');
}
console.log(typeof window.frames);
document.body.removeChild(iframe);
console.log(typeof window.frames);
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1196 次 |
| 最近记录: |