Failed to execute 'write' on 'Document': It isn't possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened.
听起来像是一个很好的“警告”,比如“没有任何效果 - 只是警告你。没有错误,真的。”
Chromium专业人士补充说:https://src.chromium.org/viewvc/blink/trunk/Source/core/dom/Document.cpp?r1=164310&r2=164309&pathrev=164310
尝试catch会对我测试的警告没有帮助,那么有没有一种很好的方法来尽快检测到这个错误?
hasInsertionPoint
到底想要什么?有时document.write工作正常但不是其他工作。 (它从我的用户脚本文件启动并找到一些东西,不要求修复或不使用document.write - 线程不是那个)
答案 0 :(得分:0)
抱歉这么晚,但是对于那些没有找到正确/正确答案或方法的人,你可以更换console.warn功能,它远离正确的形式这样做,但它是迄今为止我设法思考/找到的唯一工作......
示例:
function myCustomWarn(...args){
//Example - Customize for your needs...
var messages = args.filter(e => typeof e == 'string');
for(m in messages){
if(messages[m].indexOf('The warning I am looking for...') != -1){
//treat the warning as you want
//you could use switch case if you want
};
};
return console.oldWarn(...args);
};
console.oldWarn = console.warn;
console.warn = myCustomWarn;
请记住,这个"解决问题"仅在首先评估此代码时才有效,之后可能会抛出任何可能的警告。否则,它可能会错过首先或之前执行的任何代码抛出的警告。
答案 1 :(得分:0)
@Marco Silva的回答并不完美,他使用的ES6内容并非到处都受支持。我认为调试器应始终尽可能低级且可移植。这样可以避免您自己的调试器出现故障的情况。
这是更便于移植的代码:
function myCustomWarn(){
var args = Array.prototype.slice.call(arguments);
var messages = args.filter(function(a) {
return typeof a == 'string';
});
for(var m in messages){
alert(messages[m]);
};
/**
* Calling console.oldWarn with previous args seems to lead to a
* infinite recurvise loop on iOS. Not sure why, disabled.
* then again, if you show your log message in alert why would you
* post them to console ?
*/
// return console.oldWarn(arguments);
};
console.oldWarn = console.warn;
console.warn = myCustomWarn;