1

Тема: HTA: работа с внешними веб-страницами

Автор - mozers.
HTA-приложение загружает указанную веб-страницу, находит указанный текст и подсвечивает все вхождения этого текста. После этого возможен переход по вхождениям, а также zoom страницы (+/-). Можно использовать для организации поиска по справке каких-либо (например, своих собственных скриптовых) программ.
Пример запуска: "HTML_help.hta" "g:\SciTE\doc\SciTEDoc.html" "command.mode"
(первый параметр - путь к файлу справки, второй - текст, который надо в нём найти).
Горячие клавиши:
Esc - выход
F3 - переход по найденным вхождениям
F5 - начать заново
Плюс и Минус в правой части клавиатуры - zoom

<html>
<head>
<meta http-equiv=Content-Type content="text-html; charset=windows-1251">
<meta http-equiv=MSThemeCompatible content=yes>
<meta name=author content=mozers™>
<meta name=generator content=SciTE-Ru>
<hta:application
id=HTA
applicationName=html_HELP
icon=winhlp32.exe
maximizeButton=yes
innerBorder=no
scroll=no
selection=yes
contextMenu=yes
singleinstance=yes
version=1.1
>
<script language=JavaScript>
function Shortcuts(evnt, pane){
    if (pane == 0){
        var pane = self;
    } else {
        var pane = parent;
    }
    switch(evnt.keyCode){
        case 116:  // F5 - отменяем рефреш
            pane.event.cancelBubble = true;
            pane.event.returnValue = false;
            return(false);
            break;
        case 27: //Esc - выход
            pane.window.close(true);
            break;
        case 114: //F3 - следующее вхождение
            pane.FindNext();
            break;
        case 107: // серый +
        case 187: // +
            pane.Zoom(5);
            break;
        case 109: // серый -
        case 189: // -
            pane.Zoom(-5);
            break;
    }
    return;
}

document.onkeydown = function(){Shortcuts(event, 0)}

function html_doc_onkeydown(){
    Shortcuts(html_doc.event, 1);
}
</script>
<style type="text/css">
body, table {font:bold 8px "MS Sans Serif"; color:#000080; background-color:threedface; cursor:default; margin:0px;}
input {font-family:"MS Sans Serif"; font-size:8px;}
input.p {font:bold 8px "Courier New"; color:#000080; width:15pt; text-align:center;}
</style>
<title>html HELP</title>
</head><body>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
    <tr>
        <td>
            &nbsp;&nbsp;Zoom:
            &nbsp;<INPUT class="p" TYPE="button" Value="-" onClick="Zoom(-5);" title="ZoomIn [-]">
            &nbsp;<INPUT name="txtZoom" TYPE=text value="100%" style="width:40px; text-align:center;" DISABLED>
            &nbsp;<INPUT class="p" TYPE="button" Value="+" onClick="Zoom(5);" title="ZoomOut [+]">
        </td>
        <td align="right">
            Find:&nbsp;&nbsp;<INPUT name=sText TYPE=text value="" style="width:30%" onClick="SearchReset();">
            &nbsp;&nbsp;<INPUT style="color:#000080" NAME="btnSearch" TYPE="button" Value="Search" onClick="Find();" title="Find Next [F3]">&nbsp;&nbsp;&nbsp;
        </td>
    </tr>
</table>
<script language=JavaScript>
// Читаем аргументы ком.строки
var cmd = HTA.commandLine;
var re=/"(.*?)"/g;
var Arr_cmd = re.exec(cmd);
Arr_cmd = re.exec(cmd);
if (Arr_cmd) {
    var help_path = Arr_cmd[1];
    var text_find = "";
    Arr_cmd = re.exec(cmd);
    if (Arr_cmd) {
        text_find = Arr_cmd[1];
        sText.value = text_find;
    }
} else {
    alert ('Command line:\n html_HELP.hta "c:\\path\\doc.html" "find_string"');
    window.close(false);
}

var find_num=0;
var find_num_max=0;
var TextRange;
var zoom = 100;

function FindStart(){
    TextRange.execCommand('BackColor', '', '');
    for(var i = 0; TextRange.findText(sText.value); i++){
        TextRange.execCommand('BackColor','','yellow');
        TextRange.collapse(false);
    }
    return i;
}

function FindNext(){
    if (find_num == 0) {TextRange = html_doc.document.body.createTextRange();}
    TextRange.findText(sText.value);
    TextRange.select();
    TextRange.collapse(false);
    find_num++;
    if (find_num >= find_num_max){find_num = 0}
    btnSearch.value='Go to ' + (find_num+1) + ' (in '+ find_num_max +')';
}

function Find(){
    if (sText.value == ""){return;}
    if (find_num_max == 0){
        TextRange = html_doc.document.body.createTextRange();
        find_num_max = FindStart();
        if (find_num_max == 0) {
            btnSearch.value = 'Not Found';
            btnSearch.disabled = true;
            sText.style.backgroundColor = "#FF9999";
        }else{
            btnSearch.value = 'Go to 1 (in ' + find_num_max +')';
        }
    }else{
        FindNext();
    }
}

function SearchReset(){
    sText.value = '';
    btnSearch.value = 'Search';
    btnSearch.disabled = false;
    sText.style.backgroundColor = "window";
    find_num_max = 0;
}

function Zoom(i){
    zoom = zoom + i;
    html_doc.document.body.style.zoom = zoom + "%";
    txtZoom.value = zoom + "%";
}

function on_load() {
    html_doc.document.onkeydown = function() {parent.html_doc_onkeydown()};
    document.title = html_doc.document.title + " - " + HTA.applicationName.replace(/_/g,' ') + ' ' + HTA.version;
    Find();
    if (find_num_max>0){FindNext();}
}

document.write('<div style="width:100%; height:100%;"><IFRAME onLoad="on_load();" id="html_doc" src="'+help_path+'" width="100%" height="100%" style="padding-bottom:20px;"><\/IFRAME><\/div>');
</script>
</body>
</html>
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.