Как я могу получить любое исключение, которое происходит в коде на стороне клиента как «Пауза на выведенных исключениях» на инструментах разработчика Chrome?Поймать все клиентские ошибки на сервере
ответ
Я нашел решение!
Я использовал C# и MVC.
Добавить новый класс, чтобы настроить ваши JS файлы сверток, как это:
public class CustomScriptBundle : ScriptBundle
{
public CustomScriptBundle(string virtualPath) : base(virtualPath)
{
Builder = new CustomScriptBundleBuilder();
}
public CustomScriptBundle(string virtualPath, string cdnPath)
: base(virtualPath, cdnPath)
{
Builder = new CustomScriptBundleBuilder();
}
}
И создать еще один класс, чтобы изменить содержание файлов JS следующим образом ::
class CustomScriptBundleBuilder : IBundleBuilder
{
private string Read(BundleFile file)
{
//read file
FileInfo fileInfo = new FileInfo(HttpContext.Current.Server.MapPath(@file.IncludedVirtualPath));
using (var reader = fileInfo.OpenText())
{
return reader.ReadToEnd();
}
}
public string BuildBundleContent(Bundle bundle, BundleContext context, IEnumerable<BundleFile> files)
{
var content = new StringBuilder();
foreach (var fileInfo in files)
{
var contents = new StringBuilder(Read(fileInfo));
//a regular expersion to get catch blocks
const string pattern = @"\bcatch\b(\s*)*\((?<errVariable>([^)])*)\)(\s*)*\{(?<blockContent>([^{}])*(\{([^}])*\})*([^}])*)\}";
var regex = new Regex(pattern);
var matches = regex.Matches(contents.ToString());
for (var i = matches.Count - 1; i >= 0; i--) //from end to start! (to avoid loss index)
{
var match = matches[i];
//catch(errVariable)
var errVariable = match.Groups["errVariable"].ToString();
//start index of catch block
var blockContentIndex = match.Groups["blockContent"].Index;
var hasContent = match.Groups["blockContent"].Length > 2;
contents.Insert(blockContentIndex,
string.Format("if(customErrorLogging)customErrorLogging({0}){1}", errVariable, hasContent ? ";" : ""));
}
var parser = new JSParser(contents.ToString());
var bundleValue = parser.Parse(parser.Settings).ToCode();
content.Append(bundleValue);
content.AppendLine(";");
}
return content.ToString();
}
}
Теперь, укажите ваши файлы js в приложении. Связки с вашим классом:
BundleTable.Bundles.Add(new CustomScriptBundle("~/scripts/vendor").Include("~/scripts/any.js"));
Наконец, в новом файле js wri Функция тэ customErrorLogging, как описано ниже, и добавить его в основной форме HTML вашего проекта:
"use strict";
var customErrorLogging = function (ex) {
//do something
};
window.onerror = function (message, file, line, col, error) {
customErrorLogging({
message: message,
file: file,
line: line,
col: col,
error: error
}, this);
return true;
};
Теперь вы можете перехватывать все исключения в вашем приложении и управлять ими :)
Вы можете использовать попытаться/поймать блоков:
try {
myUnsafeFunction(); // this may cause an error which we want to handle
}
catch (e) {
logMyErrors(e); // here the variable e holds information about the error; do any post-processing you wish with it
}
Как видно из названия, вы пытаетесь выполнить код в блоке «попробовать». Если возникает ошибка, вы можете выполнять определенные задачи (например, регистрировать ошибку определенным образом) в блоке «catch».
Многие другие варианты: вы можете иметь несколько «улов» блоков в зависимости от типа ошибки, которая была брошена и т.д. Более подробная информация здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch
увидеть небольшой пример того, как можно поймать исключение :
try {
alert("proper alert!");
aert("error this is not a function!");
}
catch(err) {
document.getElementById("demo").innerHTML = err.message;
}
<body>
<p id="demo"></p>
</body>
поместить ваш код в блок попробовать и попытаться поймать ошибку поймать блока.
спасибо за ваш ответ, но я хочу поймать любое исключение в такой функции, как window.onerror, даже если бы я использовал блоки захвата try, без каких-либо изменений в коде приложения! – Pedram
- 1. петля на сервере, которая считывает все клиентские сокеты.
- 2. Поймать все ошибки в отношении React 15.3.1
- 3. Как поймать все ошибки во всех представлениях?
- 4. Поймать все ошибки исключение функции psql
- 5. Массовая вставка - поймать все ошибки ограничения
- 6. Монолог: как поймать все ошибки и исключения
- 7. Поймать все необработанная ошибки в Глотке
- 8. не реплицирование данных на все клиентские узлы
- 9. Поймать все ошибки на уровне страницы, не нарушая страницу
- 10. Поймать ошибки на пути temlpateUrl
- 11. GWT: отправить клиентские ошибки/трассировки стека на сервер?
- 12. Захват метеор, чтобы поймать все ошибки метода сбора
- 13. SQL 2005: Откройте все клиентские подключения
- 14. попробуйте поймать все приложение
- 15. MVC-клиентские клиентские принтеры
- 16. Не удалось поймать исключение на сервере
- 17. Поймать HTTP POST из Webhook на сервере
- 18. Как получить клиентские сертификаты на сервере Go HTTPS
- 19. Клиентские вызовы удаленной функции на сервере в Python. Как реализовать?
- 20. Как поймать ошибки X?
- 21. Ошибки поймать блок
- 22. Поймать ошибки или исключения
- 23. Email Кросс-браузер и кросс-клиентские ошибки
- 24. Scala попытаться поймать ошибки
- 25. Поймать Android MediaPlayer ошибки
- 26. Автоматически перечислять все папки местоположения на сервере
- 27. Возможно найти все клиентские коллекции с консоли?
- 28. Есть ли место, где можно поймать все ошибки signalr?
- 29. Поймать ошибки от FirebaseListObservable на Angularfire2
- 30. Чистый способ поймать все ошибки, возникшие в приложении MVC 3.0?
спасибо за ответ, но я хочу чтобы поймать любое исключение в такой функции, как window.onerror, даже если я использовал блоки захвата try, без каких-либо изменений в коде приложения! – Pedram
Я не уверен, что понимаю, чего вы хотите достичь. Вы хотите обрабатывать все свои ошибки в одной функции? Тогда вы не ответили на свой вопрос? Не влияет ли window.onerror ваши потребности? – TanguyP
Да, вы понимаете, но window.onerror не возникает, когда мы используем блоки try/catch в коде. – Pedram