Создать ссылку на открытие локального файла с фокусом в определенном месте
Я делаю отчет в виде документа HTML. Мне нужно создать ссылки на открытие локальных файлов с фокусом в определенном месте (известна строка, в файле ее надо найти поиском). Дело в том, что я пишу программу на С++, отчет в HTML я сформировала с обычными ссылками, а вот как сделать так, чтобы они открывались на определенной строке, да еще и желательно подсвеченной, не знаю. Я полагаю, надо вставить код на js, но я с ним плохо знакома. Помогите, пожалуйста, скажите хотя бы, какие функции использовать.
|
MARY_FS,
А какой программой вы собираетесь открывать html-файл? |
Dilettante_Pro,
html-файл с отчетом открывает пользователь из проводника. |
Dilettante_Pro,
или Вы имели ввиду, в каком браузере? |
MARY_FS,
В браузере? А куда указывают ссылки? |
Dilettante_Pro,
на локальные текстовые файлы на компьютере. Открываться они должны или в браузере, или лучше в текстовом редакторе. |
Цитата:
Локальные текстовые? А они чем открываются? И что - это все только на одном компьютере? Или они переносятся и на другие с сохранением структуры размещения - чтобы ссылки не нарушались? |
Dilettante_Pro,
я имела ввиду javascript. Я формирую отчет в HTML по результатам анализа текстовых файлов <a href=\"file://localhost/" + File + "\" target=\"_new\" >" + File + "</a> Сформировала ссылки на локальные файлы. они открываются в браузере, но на начале. А мне нужно чтобы они открывались на том месте, где нашлась сигнатура. В лучшем варианте - в текстовом редакторе. Все это мне надо сделать на HTML, я так полагаю, надо вставить код на javascript |
Цитата:
В головном файле в ссылку надо добавить параметр с сигнатурой, чтобы было в результате примерно так: <a href="file://localhost/filename.html?sign=текст сигнатуры" ... Текстовые файлы, открываемые по ссылкам, придется преобразовать в html - для того, чтобы в них работал javascript, примерно так: <!DOCTYPE html> <html> <head> <script type="text/javascript"> // здесь будет скрипт обработки </script> </head> <body onload=" getParameterByName('sign')"> <textarea rows="40" style="width:100%;height:100%"> Текст из исходного текстового файла ..... ..... </textarea> </body> </html> Насчет скрипта обработки: Получение параметров из головного файла - это легко: function getParameterByName(name) { name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); var regexS = "[\\?&]" + name + "=([^&#]*)"; var regex = new RegExp(regexS); var results = regex.exec(window.location.search); if (results == null) // нет параметра - ничего не делаем else var signature = decodeURIComponent(results[1].replace(/\+/g, " ")); // далее нужен поиск по сигнатуре и скроллинг в верх экрана }; А вот насчет поиска и скроллинга столкнулся с проблемами: пробовал использовать Range и sctollIntoView - но применительно к содержимому textarea эти методы отказываются корректно работать. Если исходный текст размещать в div - эти методы работают, но для нормального отображения исходного текста требуется дополнительная обработка Может, кто что подскажет по этому поводу? PS: при размещении в div работоспособен такой код поиска и скроллинга: var start = document.getElementsByTagName('div')[0].firstChild; if (document.createRange) { var rng = document.createRange(); rng.setStart(start, start.nodeValue.indexOf(signature)); rng.setEnd(start, start.nodeValue.indexOf(signature) + signature.length); var highlightDiv = document.createElement('span'); highlightDiv.style.backgroundColor = 'lightblue'; rng.surroundContents(highlightDiv); highlightDiv.scrollIntoView(); } else { alert('Вероятно, у вас IE8-'); } |
MARY_FS,
Получился работоспособный вариант, правда, немного тормозной. Текстовый файл оформлять в виде <!DOCTYPE html> <html> <head> <script type="text/javascript"> function getParameterByName(name) { name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); var regexS = "[\\?&]" + name + "=([^&#]*)"; var regex = new RegExp(regexS); var results = regex.exec(window.location.search); if (results == null) { // нет параметра - ничего не делаем } else { var signature = decodeURIComponent(results[1].replace(/\+/g, " ")); var t1 = document.getElementById('rest'), t2 = document.getElementById('cont'), scr, buffer = t1.value.split("\n"), signfound = false; for (var i = 0; i < buffer.length; i++) { if (buffer[i].indexOf(signature) > 0) { signfound = true }; t2.value += buffer[i] + "\n"; if (signfound) { scr = t2.scrollHeight - 40; signfound = false; } } t2.scrollTop = cr; } }; </script> </head> <body onload=" getParameterByName('sign')"> <textarea id="rest" style="display:none"> Текст из исходного текстового файла ..... ..... </textarea> <textarea id="cont" rows="40" style="width:100%;height:100%"> </textarea> </body> </html> |
Часовой пояс GMT +3, время: 08:45. |