Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,216

WebBrowser.DocumentText или как соединить html - документ из разных файлов с использованием скрипта

10.06.2020, 22:49. Показов 2702. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется рабочий html-документ со стилем и скриптом Highlight.js, который не хотел запускаться без 5-ой строки в WebBrowser (в адекватных браузерах вообще проблем нет)
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="utf-8">
    <meta http-equiv="x-ua-compatible" content="ie=edge"> <!-- Для работы скрипта в WebBrowser -->
    <link rel="stylesheet" href="vs.css">
    <script src="highlight.pack.js"></script>
    <script>hljs.initHighlightingOnLoad();</script>
</head>
<body>
    Обычный текст<br>
    <pre><code class="cs">
using System;
 
class Program
{
    static void Main()
    {
        int number = 5;
        string str = "Hello World";
        Console.WriteLine(str + " " + number);
 
        Console.ReadKey();
    }
}
    </code></pre>
</body>
</html>
Запускаю эту страницу в WebBrowser таким образом, никаких проблем
C#
1
webBrowser1.Url = new Uri("C:/Test/index.html");
Однако задумка у меня немного иная: я разбиваю этот html на 3 "части", то бишь на 3 файла:
1 файл) 1-10 строка кода
2 файл) 11-26 строка кода
3 файл) 27-28 строка кода
1 и 3 файлы всегда будут неизменны, а вот 2-ой файл уже будет выбираться от запроса пользователя.
Нашел один вариант, который "схлопывает" текст из этих файлов и передает его в браузер
C#
1
2
3
            webBrowser1.DocumentText = new StreamReader("C:/Test/indexStart.txt").ReadToEnd() +
                                       new StreamReader("C:/Test/temp.html").ReadToEnd() +
                                       new StreamReader("C:/Test/indexEnd.txt").ReadToEnd();
Сама html-страница и также стили работают без проблем. А вот скрипт выдает ошибку (скриншот). Как можно заставить работать скрипт, учитывая что файлы надо "схлопывать" ?
Миниатюры
WebBrowser.DocumentText или как соединить html - документ из разных файлов с использованием скрипта   WebBrowser.DocumentText или как соединить html - документ из разных файлов с использованием скрипта  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.06.2020, 22:49
Ответы с готовыми решениями:

Соединить 2 скрипта в один или сбор информации из разных автозаполняемых полей
Добрый день, последняя надежда на Вас. Столкнулся с такой проблемой: Хочу сделать общее поле, в которое будут собираться значения...

Как считать WebBrowser.DocumentText по строчно?
Решил обратиться т.к. час поиска в сети не дал результата (По крайней мере для меня). Я научился читать файлы построчно через...

Как соединить несколько PDF файлов в один документ PDF?
имею распечатку книжки в 45 pdf файлах. как-то неудобно просматривать её. как их все объединить в один pdf файл? Может спец софт необходим?

18
800 / 583 / 207
Регистрация: 21.02.2019
Сообщений: 2,095
11.06.2020, 11:15
Enifan,
.. а если схлопнуть сначала в string, а уже потом целиком скормить браузеру? .. похоже, он по частям начинает инициализировать страницу ...
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,216
11.06.2020, 13:24  [ТС]
Цитата Сообщение от carrotik Посмотреть сообщение
а если схлопнуть сначала в string, а уже потом целиком скормить браузеру?
компилятор так и делает, оператор + имеет высший приоритет чем =, пока не схлопнет в одну строку - в браузер не запишет. PS делал по отдельности, как и ожидал - результат тот же (отрицательный)
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
12.06.2020, 08:22
Лучший ответ Сообщение было отмечено Enifan как решение

Решение

Цитата Сообщение от Enifan Посмотреть сообщение
А вот скрипт выдает ошибку (скриншот).
Ну у тебя ведь в документе указан относительный путь к скрипту. Относительно чего он должен разрешаться, если ты не грузил страницу ни с какого адреса, а просто передал ее как текст? В первом случае это был адрес "C:/Test/index.html", вот в этом же каталоге и ищется все, что имеет относительный адрес, а когда просто код страницы передается DocumentText, то ардесом этой страницы будет about:blank, вот относительно этого адреса и будут разрешаться все относительные пути, что, в принципе, и видно из сообщений.

Добавлено через 1 минуту
Enifan, и кстати, если нужно что-то типа мастер-страницы, в которую будет грузиться разное содержимое, то почему бы фреймы не использовать?
1
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,216
12.06.2020, 14:58  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
в документе указан относительный путь к скрипту
И то правда, я бы не додумался.
Теперь появилась новая проблема - как задать каталог по умолчанию. Сайтов будет много + ссылки в них, каждый раз прописывать полный путь - не лучшая затея, а если захочется переместить все файлы в другой каталог... У меня терпения не хватит все ссылки переделывать.
Цитата Сообщение от diadiavova Посмотреть сообщение
то почему бы фреймы не использовать?
Честно говоря я не пойму как фреймы решат мою проблему. Ведь во фрейм загружается полная страница от <doctype> до </html>, и идея по "раздроблению" страницы на 3 части теряет смысл. Или фреймы обладают какой спецификой, которую я не знаю?
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
12.06.2020, 15:56
Лучший ответ Сообщение было отмечено Enifan как решение

Решение

Цитата Сообщение от Enifan Посмотреть сообщение
Теперь появилась новая проблема - как задать каталог по умолчанию.
Ну, можно определить элемент base
HTML5
1
2
3
4
5
6
<head>
    <meta charset='utf-8'>
    <meta http-equiv='x-ua-compatible' content='ie=edge'/>
    <title>Page from string</title>
    <base href='C:/Test/' />
</head>
Цитата Сообщение от Enifan Посмотреть сообщение
и идея по "раздроблению" страницы на 3 части теряет смысл.
Видимо я просто не понял идею. Я думал, что раздробление было средством для достижения цели выделения общего контента, чтобы не дублировать его, но если раздробление и было целью, то тогда я, конечно, не прав. Кстати, частичную страницу тоже можно в браузер загрузить, а стало быть и во фрейм тоже, ну да ладно... ))
1
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,216
12.06.2020, 16:43  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
раздробление и было целью
Целью была такая идея - в каждом html-файле будет одинаковая архитектура для корректной работы страницы (doctype, кодировка, теги head, body, html). Можно было бы просто копипастить этот шаблон в каждую страницу, и все что остается - написать контент (который видит пользователь, содержимое тега body). То бишь страницы будут отличаться только контентом. Вариант является нормальным для веб-разработки, но в таком случаи мне надо:
1) В каждую страницу копировать этот шаблон (это еще ладно, не так проблемно)
2) В шаблоне может что то измениться. Например - сейчас вы дали мне хорошую идею (ту что я искал) <base href='C:/Test/' />. А теперь представим тот вариант что у меня уже написано 1000 страниц, по 10 ссылок в каждой. Вы представляете что мне надо сделать, чтобы изменить шаблон в 1000 страницах - да я же с ума сойду + ошибок наделаю.
Альтернатива - раздробление страницы. Мне достаточно вставить только одну строку (что вы предложили) в "C:/Test/indexStart.txt", и все. И никаких переделок в 1000 страницах.
Если есть более правильная альтернатива моей идее - я бы ее рассмотрел, но пока ничего в голову не приходит кроме раздробления.
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
12.06.2020, 17:10
Цитата Сообщение от Enifan Посмотреть сообщение
Если есть более правильная альтернатива моей идее - я бы ее рассмотрел, но пока ничего в голову не приходит кроме раздробления.
Насчет более правильной ничего сказать не могу, поскольку у меня нет картины целиком. Могу предложить пару вариантов, из которых уже можно будет что-то выбрать.
Можно вынести общее для всех страниц содержимое в отдельный HTML файл, загружать его с помощью Navigate, а в обработчике DocumentCompleted добавлять уже конкретную страницу. Ну что вроде
C#
1
2
3
4
        private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            webBrowser1.Document.Body.InnerHtml = pageText;
        }
Другой вариант посложнее, но зато даст ряд дополнительных возможностей. Можно в приложении захостить веб-сервер и тогда уже собирать страницу в обработчике запросов. Простейший сервер и самостоятельно написать не проблема, но можно и готовый найти, дофига их.
1
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,216
12.06.2020, 18:49  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
у меня нет картины целиком
На форме будет TreeView и WebBrowser. Каждый элемент дерева содержит название и путь. Помимо дерева будет еще работа с БД. Но не буду усложнять, возьму для примера вариант попроще, остальное сделаю без проблем:
На форме есть WebBrowser и 2 кнопки. Внутри 1-ой кнопки содержится строка "C:/Test/Кошки.html", внутри 2-ой кнопки строка "C:/Test/Собаки.html". Содержимое этих файлов
HTML5
1
Это сайт о кошках.
HTML5
1
2
3
Собака - друг человека.<br>
А еще тут есть картинка.
<img src="dogs.jpg"> <!-- относительный путь важен -->
Само собой есть шаблон, пусть он будет назван index.html
HTML5
1
2
3
4
5
6
7
8
9
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="utf-8">
</head>
<body>
 
</body>
</html>
Все что мне нужно - чтобы шаблон был одинаковый (скрипты, стили и тд), менялось бы только содержимое. Например при нажатии на одну кнопку отображалось бы содержимое сайта о собаках, при нажатии на другую - содержимое о кошках.
Идея с DocumentCompleted выглядит любопытно, только не пойму как ей воспользоваться.
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
12.06.2020, 19:13
Цитата Сообщение от Enifan Посмотреть сообщение
Идея с DocumentCompleted выглядит любопытно, только не пойму как ей воспользоваться.
В данном случае никак. Тот код, что я привел в документкомплитед, нужно выполнять в обработчиках кнопок, только, только пэйджтекст сначала надо загрузить из файла.

Добавлено через 3 минуты
Правда в этом случае скрипты срабатывающие при загрузке отрабатывать повторно не будут. Если это нужно, то это не годится. Ну я говорю, тут много нюансов есть. Я бы все-таки вариант с сервером рассмотрел, тогда контроль над процессом будет полным.
Кстати, есть еще вариант, но подозреваю, что он не подойдет, несмотря на то, что тоже дает некоторые преимущества. Можно контент держать в виде XML файлов, а представление в виде XSLT. Если контент представляет из себя набор данных, то их можно будет в этих файлах хранить в минималистичной форме, а вся разметка и вообще все, что отвечает за представление будет храниться в XSLT. Но, предполагаю, что изучение этого замечательного языка в твои планы не входит. ))
1
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,216
12.06.2020, 21:51  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
Я бы все-таки вариант с сервером рассмотрел, тогда контроль над процессом будет полным
Цитата Сообщение от diadiavova Посмотреть сообщение
XSLT. Но, предполагаю, что изучение этого замечательного языка в твои планы не входит.
Честно говоря изучение html и css (про js вообще молчу) в мои планы не входило. Но если язык разметки и таблица стилей это еще пустяковое дело (после C# на раз-два изучается), то технологии посложнее пока явно не для меня (пока в планах другое). В будущем - может быть, но пока пас. По хорошему счету - все что мне надо от html:
1) цветной текст, шрифт и тд
2) таблицы
3) картинки
4) подсветка кода
5) возможность делать "блоки" (типа <div>)
Ну может еще парочку простых инструментов от html. С помощью C#, WinForm, XML пока не знаю как это делать, поэтому приходится прибегать к языкам веб-разработки. Язык разметки очень простой, быстро тестить, выдает тот результат что и ожидаешь, быстро грузится, мало весит.

В целом оставлю пока "разбиение файлов", главное что эта "схема" работает, и работает так как я планировал. Спасибо за советы.
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
12.06.2020, 22:09
Цитата Сообщение от Enifan Посмотреть сообщение
Идея с DocumentCompleted выглядит любопытно, только не пойму как ей воспользоваться.
В принципе вариант тоже есть. При нажатии на кнопку, адрес из нее передается некой переменной, страница перезагружается, а в документкоплитед адрес берется из этой же переменной и грузится.

Примерно вот так. Тут подразумевается, что в свойстве Tag кнопок будут хранится адреса соответствующих контент страниц и обработчик кликов у них будет один.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        private void Form1_Load(object sender, EventArgs e)
        {
            webBrowser1.DocumentCompleted += WebBrowser1_DocumentCompleted;
            webBrowser1.Navigate("C://path/to/masterpage.html");
        }
 
        private string fileName = "C://path/to/default.html";
 
        private void Button_Click(object sender, EventArgs e)
        {
            fileName = (sender as Control).Tag as string;
            webBrowser1.Navigate("C://path/to/masterpage.html");
        }
 
        private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            webBrowser1.Document.Body.InnerHtml = File.ReadAllText(fileName);
        }
1
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,216
12.06.2020, 22:39  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
документкоплитед
идея и правда хорошая, код выглядит чище, нежели мое "творение". Одна беда - скрипт не грузится... (но и ошибки не выдает) А подсветка кода важна.
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
13.06.2020, 14:15
Цитата Сообщение от Enifan Посмотреть сообщение
Одна беда - скрипт не грузится.
Скрипт загружен и новые блоки просто надо инициализировать. Кстати говоря, это можно сделать и для фреймов, да и дерево можно на HTML построить. Я хотел пример показать с фреймами, но у меня почему-то не работает highlight.js в ие. Вообще пишет, что объект hljs не определен. Не знаю как тебе удалось его приручить, но общий подход следующий. Если делаешь на фреймах, то выглядеть это будет примерно так

Кликните здесь для просмотра всего текста
top.html
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!DOCTYPE html>
 
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <meta http-equiv='x-ua-compatible' content='ie=edge' />
    <title>Top page</title>
    <link rel="stylesheet" href="default.min.css" />
    <script src="highlight.min.js"></script>
    <style>
        .left {
            position: absolute;
            left: 0px;
            top: 0px;
            height: 100%;
            width: 20%;
            border: solid black 1px;
        }
 
        .main {
            position: absolute;
            left: 20%;
            top: 0px;
            height: 100%;
            width: 79%;
            border: solid black 1px;
        }
 
        #content {
            width: 100%;
            height: 100%;
        }
    </style>
</head>
<body>
 
    <section class="left">
        <ul>
            <li>
                <a href="frame1.html" target="content">Frame 1</a>
            </li>
            <li>
                <a href="frame2.html" target="content">Frame 2</a>
            </li>
        </ul>
    </section>
    <section class="main">
        <iframe id="content" name="content"></iframe>
    </section>
 
    <script>
        document.getElementById("content").addEventListener('load', function (evt) {
            let blocks = evt.target.contentWindow.document.querySelectorAll('pre code');
            for (let i = 0; i < blocks.length; i++) {
                let block = blocks[i];
                hljs.highlightBlock(block);
            }
        });
    </script>
</body>
</html>
frame1.html
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<!DOCTYPE html>
 
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <meta http-equiv='x-ua-compatible' content='ie=edge' />
    <title></title>
</head>
<body>
    <h1>Frame 1</h1>
    <pre>
        <code class="language-javascript">
            function hasBalance(expression)
            {
            let stack = [], c = "(){}[]";
            for (let char of expression)
            {
            if ("({[".includes(char)) stack.push(c[c.indexOf(char) + 1]);
            else if (")]}".includes(char) && stack.pop() != char)
            return false
            }
            return stack.length == 0;
            }
            /**
            * @param {Array<Number>
                } arr
                * @param {Number} max
                */
                function nextCombination(arr, max)
                {
                let N = max, M = arr.length;
                for (let i = M - 1; i >= 0; i--)
                if (arr[i] < N - M + i + 1)
                {
                arr[i]++;
                for (let j = i; j < M - 1; j++)
                arr[j + 1] = arr[j] + 1;
                return arr;
                }
                return null;
                }
 
                /**
                * @param {String} line
                */
                function removeBrackets(line)
                {
                let la = line.replace(/^[\}\]\)]+|[\{\[\(]+$/g, "").split``;
                if (hasBalance(la)) return la.join``;
                for (let i = 0; i < la.length; i++)
                {
                let arr = Array(i).fill(0).map((v, i) => i);
                do
                {
                let s = la.filter((v, i) => !arr.includes(i));
                if (hasBalance(s)) return s.join``;
 
                } while ((arr = nextCombination(arr, 5)) != null)
                }
                return "";
                }
        </code>
    </pre>
 
</body>
</html>
frame2.html
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<!DOCTYPE html>
 
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <meta http-equiv='x-ua-compatible' content='ie=edge' />
    <title></title>
</head>
<body>
    <h1>Frame 1</h1>
    <pre>
        <code class="language-javascript">
            function hasBalance(expression)
            {
            let stack = [], c = "(){}[]";
            for (let char of expression)
            {
            if ("({[".includes(char)) stack.push(c[c.indexOf(char) + 1]);
            else if (")]}".includes(char) && stack.pop() != char)
            return false
            }
            return stack.length == 0;
            }
            /**
            * @param {Array<Number>
                } arr
                * @param {Number} max
                */
                function nextCombination(arr, max)
                {
                let N = max, M = arr.length;
                for (let i = M - 1; i >= 0; i--)
                if (arr[i] < N - M + i + 1)
                {
                arr[i]++;
                for (let j = i; j < M - 1; j++)
                arr[j + 1] = arr[j] + 1;
                return arr;
                }
                return null;
                }
 
                /**
                * @param {String} line
                */
                function removeBrackets(line)
                {
                let la = line.replace(/^[\}\]\)]+|[\{\[\(]+$/g, "").split``;
                if (hasBalance(la)) return la.join``;
                for (let i = 0; i < la.length; i++)
                {
                let arr = Array(i).fill(0).map((v, i) => i);
                do
                {
                let s = la.filter((v, i) => !arr.includes(i));
                if (hasBalance(s)) return s.join``;
 
                } while ((arr = nextCombination(arr, 5)) != null)
                }
                return "";
                }
        </code>
    </pre>
 
</body>
</html>

То есть, всякий раз при загрузке фрейма, внутри него ищутся блоки и каждый передается на обработку хайлайту.

Если делать без фреймво, а так как я показал выше, то грузить это надо не body а в специально созданный для этого блок, а код инициализации вставить в функцию, которую следует вызывать каждый раз после вставки контента. Примерно так
Это размещаем в скрипте на главной странице
JavaScript
1
2
3
4
5
6
7
        function initialize() {
            let blocks = document.querySelectorAll('pre code');
            for (let i = 0; i < blocks.length; i++) {
                let block = blocks[i];
                hljs.highlightBlock(block);
            }
        }
А в коде C# после вставки контента в документакомплитед
C#
1
2
3
4
5
       private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            webBrowser1.Document.Body.InnerHtml = File.ReadAllText(fileName);
            webBrowser1.Document.InvokeScript("initialize");
        }
Ну вот как-то так.

Добавлено через 6 минут
В принципе ие ругается на стрелочные функции, которых он не поддерживает и которые есть в хайлайте, так что не знаю как тебе удалось приручить эту либу, может старая версия какая, но у меня не работает.

Добавлено через 3 минуты
Ну и естественно, если для вставки контента будет блок, скажем такой
HTML5
1
<div id="content"></div>
То грузить в него надо будет так
C#
1
2
3
4
5
       private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            webBrowser1.Document.GetElementById("content").InnerHtml = File.ReadAllText(fileName);
            webBrowser1.Document.InvokeScript("initialize");
        }
Думаю, это и так понятно, но на всякий случай.

Добавлено через 1 час 35 минут
В случае с фреймами css ещё подключить придется. Это тоже можно скриптом сделать, еслина, конечно. Да скрипт можно скриптом подгрузить.
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,216
13.06.2020, 14:42  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
дерево можно на HTML построить
Да, я где то видел скрипт, даже запускал его с горя пополам, но то чудо что я увидел в итоге - тысяча <div> меня сразу оттолкнуло. Да и загрузка в дерево будет происходить изи БД. Да и при редактировании дерева надо будет изменение делать в БД. В веб-разработке у у меня столько мозгов не хватит, да и желания нет, а вот на шарпе на раз-два делаю.
Цитата Сообщение от diadiavova Посмотреть сообщение
Не знаю как тебе удалось его приручить
Там кривая инструкция по подключению (в той ссылке что я указывал), скрипт то верный, но куда его надо прописывать...
Суть в том, что надо подключить скрипт + указать css файл, откуда он будет брать "раскраску". Скину эти файлы, их надо в одну папку, ну и путь к скрипту и стилю надо указать верный. Также надо учитывать этот скрипт может не запуститься в некоторых браузерах, у меня в Яндекс-браузере запустился без проблем, для запуска в WebBrowser нужно было прописывать дополнительную строку (5 строка из 1 поста)

В целом за код спасибо, но наврятли он мне пригодится, ибо мои познания в JS можно сказать нулевые, я с трудом тот код читал, что либо отредактировать вряд ли смогу.
Вложения
Тип файла: rar Скрипт.rar (9.8 Кб, 1 просмотров)
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
13.06.2020, 17:44
Цитата Сообщение от Enifan Посмотреть сообщение
В веб-разработке у у меня столько мозгов не хватит, да и желания нет, а вот на шарпе на раз-два делаю.
Ну там, дело в том, что готовых деревьев в HTML нет, а вот либы разные существуют на любой вкус и по каждой придется изучать документацию, так что здесь проблема не в знании веба, а в конкретных либах, которые знают только те, кто с ними работал. Но, в принципе, согласен, что если все равно придется к датабазе обращаться и все такое и сделать страницу независимой от программы все равно не получится, то, наверно, обычное дерево винформовское - хорошее решение.
Цитата Сообщение от Enifan Посмотреть сообщение
в той ссылке что я указывал
Да вроде не было ссылок.
Цитата Сообщение от Enifan Посмотреть сообщение
Скину эти файлы
Вот эти работают, да. А вот то, что я скачивал с оф. сайта работать не хотели. Прикрепил пример с фреймами, там я стиль к фрейму подключаю динамически. Ну и проект, где код из файла вставляется в документ без перезагрузки и после этого инициируется хайлайт. Там вообще все просто получилось.
Вложения
Тип файла: zip WBDocText.zip (82.1 Кб, 1 просмотров)
1
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
13.06.2020, 17:45
фреймы не загрузились ))
Вложения
Тип файла: zip frames.zip (12.5 Кб, 1 просмотров)
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,216
14.06.2020, 00:28  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
Да вроде не было ссылок.
в самом 1-ом посте, в 1-ой строке текста
Цитата Сообщение от diadiavova Посмотреть сообщение
Прикрепил пример с фреймами, там я стиль к фрейму подключаю динамически. Ну и проект, где код из файла вставляется в документ без перезагрузки и после этого инициируется хайлайт. Там вообще все просто получилось.
Посмотрел проект, не полностью разобрался как он работает, но выглядит как то просто... Минимум строк кода. Даже подозрительно как то В будущем как нибудь надо будет получше изучить эти библиотеки.
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
14.06.2020, 00:39
Цитата Сообщение от Enifan Посмотреть сообщение
в самом 1-ом посте, в 1-ой строке текста
Да, действительно есть. А ведь посмотрел же перед тем как писать, что не было ))
Цитата Сообщение от Enifan Посмотреть сообщение
Посмотрел проект, не полностью разобрался как он работает, но выглядит как то просто..
Да я же описывал это уже.
Цитата Сообщение от diadiavova Посмотреть сообщение
Если делать без фреймво, а так как я показал выше, то грузить это надо не body а в специально созданный для этого блок, а код инициализации вставить в функцию, которую следует вызывать каждый раз после вставки контента. Примерно так
Это размещаем в скрипте на главной странице
И там дальше код функции. Работает предельно просто: в документации хайлайта написано, что можно инициализировать всю страницу одной функцией, а можно это делать отдельно для каждого блока. Вот я разместил на странице код инициализации всех вставленных блоков, но код этот упаковал в функцию initialize, она на топовой странице размещена. Всякий раз, когда я вставляю новое содержимое в документ, следующей строчкой вызываю эту функцию через Document.InvokeScript. Это вся логика. Там разбираться не в чем.
Цитата Сообщение от Enifan Посмотреть сообщение
В будущем как нибудь надо будет получше изучить эти библиотеки.
Не было там никаких библиотек.

Там еще в проекте есть папка XSLT, там просто пример накидал два файла с данными и к обоим преобразование подключено. Можешь загрузить, посмотреть как это выглядит.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.06.2020, 00:39
Помогаю со студенческими работами здесь

Не отображается .html документ в WebBrowser
Не отображается .html документ в WebBrowser. Вместо него отображается только часть текста и то в перевёрнутом виде. procedure...

Нужно соединить 2 php скрипта. И получить html таблицу
Всем привет! Я не программист, мне сложно. Мучаюсь с одной проблемой. У нас есть сайт bmfl.ru на WordPress Для администрирования...

Отобразить html-документ в форме, используя webBrowser
Имеется html страница, содержит изображения и текст. При выполнение кода отображается лишь текст, но нет изображения, как исправить??: ...

Извлечь HTML из скрипта страницы WebBrowser
Добрый день. Есть следующий HTML код: &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;...

Как в блоке открыть HTML или PHP документ
Доброго времени суток уважаемые форумчане! Начал заниматься web программирование. Программист я не опытный и очень надеюсь на вашу помощь! ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru