Javascript conflict
Добавлено: 21 июл 2015, 09:39
Мы используем StiMvcViewer версии 2015.1.11
Он расположен на страничке с большим количеством Javascript, который, например, занимается протоколированием возникающих в браузере ошибок Javascript.
Одна из используемых нами библиотек Javascript использует такой (не рекомендованный) подход:
Это создает конфликт с Вашими библиотеками, конкретнее, с кодом:
Проблема в том, что так писать тоже не рекомендуется, подробнее:
http://speakingjs.com/es5/ch18.html#array_iteration
http://www.2ality.com/2011/04/iterating ... ts-in.html
Упрощенный вид кода, вызывающего проблему:
Он расположен на страничке с большим количеством Javascript, который, например, занимается протоколированием возникающих в браузере ошибок Javascript.
Одна из используемых нами библиотек Javascript использует такой (не рекомендованный) подход:
Код: Выделить всё
Array.prototype.compare = function (testArr) {
if (this.length != testArr.length) return false;
for (var i = 0; i < testArr.length; i++) {
if (this[i].compare) {
if (!this[i].compare(testArr[i])) return false;
}
if (this[i] !== testArr[i]) return false;
}
return true;
};
Код: Выделить всё
var buttonNames = ["DocumentSecurityButton", "DigitalSignatureButton"];
for (var i in buttonNames) {
var button = exportForm.controls[buttonNames[i]];
button.innerTable.style.width = "100%";
button.style.minWidth = "220px";
button.caption.style.textAlign = "center";
button.caption.style.width = "100%";
button.style.display = "inline-block";
}
http://speakingjs.com/es5/ch18.html#array_iteration
http://www.2ality.com/2011/04/iterating ... ts-in.html
Мы смогли решить возникающую проблему (отчет не строился из-за ошибок Javascript), но, возможно, на проблему наткнутся другие клиенты."1.2. for...in"
Rules:
* Iterate over property keys, including inherited ones.
* Don’t use for arrays. It iterates over both array indices and property keys. There will thus be problems as soon as someone adds a property to an array.
Упрощенный вид кода, вызывающего проблему:
Код: Выделить всё
@using Stimulsoft.Report.Mvc;
@{
Layout = null;
}
<!doctype html>
<html>
<head>
<title>Report</title>
<script type="text/jscript">
Array.prototype.compare = function (testArr) {
if (this.length != testArr.length) return false;
for (var i = 0; i < testArr.length; i++) {
if (this[i].compare) {
if (!this[i].compare(testArr[i])) return false;
}
if (this[i] !== testArr[i]) return false;
}
return true;
};
</script>
</head>
<body>
@Html.Stimulsoft().StiMvcViewer(
"MvcViewer",
new StiMvcViewerOptions
{
Actions =
{
GetReportSnapshot = "GetReportSnapshot",
ViewerEvent = "ViewerEvent",
}
, Localization = "~/Localization/ru.xml"
, Toolbar =
{
ShowDesignButton = false,
ShowParametersButton = false
}
, Server =
{
Controller = "StiView",
RequestTimeout = 30,
UseRelativeUrls = true,
PassQueryParametersForResources = false
}
})
</body>
</html>