Orion9

|
Posted: Sun May 03, 2026 20:48 Post subject: |
|
|
| Avada wrote: | | Локальный файл изменяться не может, поскольку предусмотрено в т.ч. его скачивание "как есть". |
Да. Понятно.
| yozhik wrote: | | а я не Урфин Джюс вообще |
Так ведь надо им становиться! Тем более, что ничего сложного в общении с ИИ нет. Он, конечно, иногда болванится, но в целом радует вменяемым кодом и полезными советами.
А вообще, вы гений! Я, конечно, и раньше игрался с болваном, но так чтобы рубануть его прямо в лоб не догадался бы, а зря!
 why does the following code not work in chm or ie? | Code: | onclick="toggleColumn()">Показать/Скрыть колонку (Alt+H)</button>
<script type="text/javascript">
function toggleColumn() {
// Просто включаем/выключаем класс на таблице
document.body.classList.toggle('hide-cols');
}
document.addEventListener('keydown', function(event) {
// Например, переключаем по нажатию Alt + H (Hide)
if (event.altKey && event.code === 'KeyH') {
event.preventDefault(); // чтобы не сработали системные функции
toggleColumn();
}
});
</script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">
/*.hide-cols td:nth-child(1),*/
.hide-cols td:nth-child(2),
.hide-cols td:nth-child(3),
.hide-cols td:nth-child(4),
.hide-cols td:nth-child(5),
.hide-cols td:nth-child(6) |
 Ответ | Code: | Основная причина в том, что формат CHM использует движок Internet Explorer (часто в режиме совместимости с очень старыми версиями), который не поддерживает современные стандарты JavaScript.Вот три критические ошибки в вашем коде для этих сред:⚠️ Почему это не работаетclassList: Свойство classList.toggle появилось только в IE10. В более старых версиях (или в CHM) оно просто не существует.event.code: Свойство 'KeyH' — это стандарт современного JS. Старый IE понимает только event.keyCode (числовой код клавиши).addEventListener: В совсем древних версиях IE (до 9-й) использовался attachEvent.✅ Исправленный код (совместимый с CHM и старым IE)Этот вариант будет работать везде, включая старые файлы справок:javascriptfunction toggleColumn() {
var body = document.body;
// Заменяем classList.toggle на проверку строки className
if (body.className.indexOf('hide-cols') !== -1) {
body.className = body.className.replace('hide-cols', '').trim();
} else {
body.className += ' hide-cols';
}
}
// Используем старый способ отлова клавиш
document.onkeydown = function(e) {
e = e || window.event;
// 72 — это код клавиши H
if (e.altKey && e.keyCode === 72) {
if (e.preventDefault) e.preventDefault(); else e.returnValue = false;
toggleColumn();
}
};
Используйте код с осторожностью.💡 Важные советы для CHM:Режим рендеринга: Добавьте этот тег в <head>, чтобы заставить CHM использовать более современный движок (если он установлен в системе):<meta http-equiv="X-UA-Compatible" content="IE=edge">CSS: Псевдоселектор :nth-child работает только в IE9+. Если вам нужна поддержка еще более старых версий, придется циклом проходить по строкам таблицы в JS и менять display у конкретных td.Хотите, я помогу переписать CSS-часть, чтобы она гарантированно работала даже в самых старых версиях справочников? |
 Hidden text | Code: | Чтобы CSS гарантированно работал в старых движках (IE6–8), которые часто встречаются в CHM, нужно отказаться от :nth-child. Старые версии IE этот селектор просто игнорируют.Единственный надежный способ — добавлять классы конкретным ячейкам.1. Измените HTMLДобавьте класс (например, col-hide) всем ячейкам (th и td), которые нужно скрывать.html<table>
<tr>
<th>Постоянная колонка</th>
<th class="col-hide">Скрываемая 1</th>
<th class="col-hide">Скрываемая 2</th>
</tr>
<tr>
<td>Данные</td>
<td class="col-hide">Скрыто 1</td>
<td class="col-hide">Скрыто 2</td>
</tr>
</table>
Используйте код с осторожностью.2. Используйте простой CSSВместо сложных селекторов используем каскад. Если у body есть класс hide-cols, то элементы с классом col-hide исчезают.css/* Этот синтаксис понимают абсолютно все версии IE */
.hide-cols .col-hide {
display: none;
}
Используйте код с осторожностью.3. Скрипт (адаптированный под старый IE)Для полноты картины используем максимально совместимый JS, который мы обсуждали ранее:javascriptfunction toggleColumn() {
var b = document.body;
// Простая проверка наличия класса в строке className
if (b.className.indexOf('hide-cols') !== -1) {
b.className = b.className.replace('hide-cols', '').trim();
} else {
b.className += ' hide-cols';
}
}
// Назначаем горячую клавишу Alt+H
document.onkeydown = function() {
var e = window.event; // Особенности старого IE
if (e.altKey && e.keyCode === 72) {
e.returnValue = false; // Отмена системного действия
toggleColumn();
}
};
Используйте код с осторожностью.Почему это лучше для CHM?Совместимость: Классы и обычный каскад .class1 .class2 работают со времен IE4.Производительность: Движку старого IE гораздо проще скрыть элементы по классу, чем высчитывать «каждый пятый элемент в строке» через :nth-child.Надежность: В CHM часто включен «режим совместимости», который ломает любой современный CSS3.У вас большая таблица, или вы можете быстро проставить классы в HTML вручную? |
В общем, я проверил оба варианта. Оба работают в плагине HTMLView! Первый такой
| Code: | <html>
<head><meta http-equiv="X-UA-Compatible" content="IE=edge">
<button onclick="toggleColumn()">Показать/Скрыть колонку (Alt+H)</button>
<script type="text/javascript">
function toggleColumn() {
var body = document.body;
// Заменяем classList.toggle на проверку строки className
if (body.className.indexOf('hide-cols') !== -1) {
body.className = body.className.replace('hide-cols', '').trim();
} else {
body.className += ' hide-cols';
}
alert("Привет! Я уведомление.");
}
// Используем старый способ отлова клавиш
document.onkeydown = function(e) {
e = e || window.event;
// 72 — это код клавиши H
if (e.altKey && e.keyCode === 72) {
if (e.preventDefault) e.preventDefault(); else e.returnValue = false;
toggleColumn();
}
};
</script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">
/*.hide-cols td:nth-child(1),*/
.hide-cols td:nth-child(2),
.hide-cols td:nth-child(3),
.hide-cols td:nth-child(4),
.hide-cols td:nth-child(5),
.hide-cols td:nth-child(6) {
display: none;
} |
Второй без X-UA-Compatible работает только на поовину, но тогда придется отказаться от td:nth-child и откатиться на скрытие полей по классу, как в VBScript, с вытекающей проблемой скрытия заголовков.
| Code: | <html>
<head><meta http-equiv="X-UA-Compatible" content="IE=edge">
<button onclick="toggleColumn()">Показать/Скрыть колонку (Alt+H)</button>
<script type="text/javascript">
function toggleColumn() {
var body = document.body;
// Заменяем classList.toggle на проверку строки className
if (body.className.indexOf('hide-cols') !== -1) {
body.className = body.className.replace('hide-cols', '').trim();
} else {
body.className += ' hide-cols';
}
alert("Привет! Я уведомление.");
}
// Используем старый способ отлова клавиш
document.onkeydown = function(e) {
e = e || window.event;
// 72 — это код клавиши H
if (e.altKey && e.keyCode === 72) {
if (e.preventDefault) e.preventDefault(); else e.returnValue = false;
toggleColumn();
}
};
</script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">
td {
border-style: solid;
border-width: 1px;
vertical-align: top;
padding: 8px;
}
.td_header {font-weight: bold; background-color: #A3E4A3; color: #000;border-style: solid;border-width: 1px 1px 1px 0; border-color: #000;}
.td_key {background-color: #FFF7E8; color: #000; border-style: solid;border-width: 0 1px 1px 1px;padding: 8px;}
.td_file {background-color: #fff; border-width: 0 1px 1px 0;padding: 8px;}
.td_section {background-color: #fff; border-width: 0 1px 1px 0;padding: 8px;}
.td_version {background-color: #fff; border-width: 0 1px 1px 0;padding: 8px;}
.td_default {background-color: #fff; border-width: 0 1px 1px 0;padding: 8px;}
.td_advanced {background-color: #fff; border-width: 0 1px 1px 0;padding: 8px;}
.td_description {background-color: #FFF7E8; border-width: 0 1px 1px 0;padding: 8px;}
.keyscount {font-size: 0.8em;}
a:link {text-decoration:none;}
a:visited {text-decoration:none;}
a:hover {text-decoration:underline;}
a:active {text-decoration:underline;}
.hidden, .shown {
cursor: pointer;
margin-right: 0.5em;
}
.hide-cols .td_header { display: none; }
.hide-cols .td_file { display: none; }
.hide-cols .td_section { display: none; }
.hide-cols .td_version { display: none; }
.hide-cols .td_default { display: none; }
.hide-cols .td_advanced { display: none; }
|
Ну, и оба варианта работают без Alt + H в плагине. Но что-то мне подсказывает, что это дело в самом плагине, там надо искать.
Можете потдвердить работоспособность кода, как будет возможность? |
|