|
Если вы знакомы с языком сценариев Jaws for Windows, то, вероятно, знаете, что сценарии Jaws практически не поддерживают работу с файлами, за исключением файлов .ini (О работе с файлами .ini можно прочитать в Справочнике разработчика скриптов). Нередко на практике возникает необходимость сохранить информацию в файле, например, в текстовом формате (.txt). Как же быть в этом случае? На помощь нам приходит технология COM, а именно объект под названием "FileSystemObject" (FSO), который входит в состав операционных систем Windows (начиная с Windows 98). Этот COM-объект позволяет читать и записывать текстовые файлы, переименовывать файлы и папки, копировать и удалять их. Нам же в этот раз понадобится лишь одна из его возможностей - сохранение текстовых данных в файле. Другой COM-объект, свойствами которого мы воспользуемся, будет InternetExplorer, известная программа просмотра html-документов. Задача, которую мы будем решать, сформулирована в заголовке этой статьи. Уточним только некоторые моменты. Во-первых, создаваемый скрипт должен быть помещен в файл скриптов для InternetExplorer, так как вызов этого скрипта имеет смысл только при работе с этой программой (в других браузерах скрипт выполняться не будет или возникнут ошибки в его работе). Во-вторых, предполагается, что вы уже освоили написание и отладку скриптов (сценариев) Jaws for Windows. Алгоритм работы скрипта несложен. Сначала через COM-интерфейс InternetExplorer скрипт получает все ссылки на текущей странице (которые сохраняются в переменной типа object). Затем происходит перебор этих ссылок и формирование текстовых данных, каждая строка которых состоит из описания ссылки (свойство innerText - регистр букв имеет значение) и гиперссылки (свойство href - регистр букв имеет значение).Если ссылка графическая, то есть отображается на странице в виде картинки, то описание её берётся из атрибута alt, который используется в html-документов для словесного описания изображения. Если на странице ссылок нет или версия InternetExplorer ниже четвертой, то озвучивается соответствующее сообщение и работа скрипта прекращается. После того как текстовые данные сформированы, выводится диалог, предлагающий пользователю выбрать, куда сохранить данные (буфер обмена или файл). В зависимости от выбора пользователя данные передаются в буфер обмена (при этом в ряде случаев может возникнуть проблема кодировки символов - наблюдалась для Jaws 5.00 - при вставке текста в редакторы Блокнот, WordPad, MicrosoftWord, но проблем не возникает при вставке, например, в текстовом редакторе Bred), либо сохраняются в файле (в этом случае никаких сложностей с кодировкой не возникает). Прежде чем сохранить данные в файле, пользователю предлагается ввести полное имя файла. Однако, в целях простоты изложения, проверка корректности пути не производится, поэтому указываемые папки должны существовать. Сам же файл будет создан, если не существует, или записан поверх существующего. Скрипт должен быть помещён в файл скриптов, соответствующих Internet Explorer, для чего, находясь в InternetExplorer, следует нажать комбинацию Insert + 0 на основной клавиатуре. После того как загрузится Диспетчер скриптов (Script Manager), следует средствами Диспетчера создать скрипт, исходный код которого приведен ниже. Скрипт был проверен для Jaws версии 4.51 и более поздних. Подробную информацию о COM-объектах FSO и InternetExplorer можно получить из сборника статей по работе с различными Windows, который можно скачать отсюда. Script ListOfLinks () Var Object fso, Object file, Object doc, Object links, Object all, Int nLinks, String buffer, String strTemp, String url, Int nIdx If (ieVersion == IE3) Then Say("Поддерживаются только версии InternetExplorer от 4 и выше",OT_MESSAGE) return EndIf let doc = ie4GetCurrentDocument () let links = doc.links let all = doc.all let nLinks = links.length If (nLinks == 0) Then Say("На этой странице ссылок нет", OT_MESSAGE) return EndIf let buffer = "Список ссылок на странице: " let strTemp = doc.title let url = doc.location.href let buffer =buffer + strTemp +" ("+url+")\r\n" let buffer =buffer + "Всего ссылок: "+IntToString(nLinks)+"\r\n" let nIdx = 0 ; Начинаем цикл по всем ссылкам на странице. While (nIdx < nLinks) ;Получаем текстовое поле ссылки. let strTemp = links(nIdx).InnerText ;Если ссылка в виде картинки, то получаем текст ее описания из атрибута alt. If (! strTemp) Then let strTemp = all(links(nIdx).SourceIndex + 1).alt EndIf let url = links(nIdx).href let strTemp =strTemp + " "+ url let buffer = buffer + "\r\n"+ strTemp let nIdx = nIdx+1 EndWhile let strTemp = "Копировать в буфер\007Сохранить в файл" let nIdx = DlgSelectItemInList (strTemp, "Список ссылок", false) If nIdx ==1 Then CopyToClipboard (buffer) Say("Список ссылок помещен в буфер обмена. Всего обнаружено " + IntToString (nLinks) + " ссылок., OT_MESSAGE") Elif nIdx ==2 Then ; Имя файла по умолчанию let strTemp= "c:\\temp\\list_of_links.txt" If InputBox("Введите полное имя файла: ", "Сохранение списка ссылок", strTemp) Then ; Если пользователь нажал Ок, то сохраняем список в файле let fso = CreateObject ("Scripting.FileSystemObject") let file =fso.CreateTextFile(strTemp, 1) file.WriteLine(buffer) file.Close() Say("Список ссылок помещен в файл " + strTemp, OT_MESSAGE) EndIf EndIF EndScript |
|||||||||
Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения. Идея и реализация: © Владимир Довыденков и Анатолий Камынин, 2004-2024 |
Социальные сети