Bonifats
@Bonifats
Начинающий программист

Как из приложения c# добавить в head html script jquery?

Добрый день!

Необходимо, чтобы на любой загружаемый сайт подключалась библиотека jquery.

Вот часть кода:
public Form1()
{
InitializeComponent();
this.Load += new EventHandler(Form1_Load);
this.webKitBrowser1.Navigated +=
new WebBrowserNavigatedEventHandler(webKitBrowser1_Navigated);

this.webKitBrowser1.DocumentCompleted +=
new WebBrowserDocumentCompletedEventHandler(webKitBrowser1_DocumentCompleted);
}
void webKitBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebKit.DOM.Document doc = webKitBrowser1.Document;
WebKit.DOM.Node head = doc.GetElementsByTagName("head")[0];
WebKit.DOM.Element jQuery = doc.CreateElement("script");
jQuery.SetAttribute("src", "ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery...");
head.AppendChild(jQuery);
}

Вопрос: что не так? Вот, не работает и все. Специально загружаю страницу, для работы которой требуется jquery, а она не работает. Читаю мануал webkit: все правильно вроде.
  • Вопрос задан
  • 644 просмотра
Решения вопроса 1
Bonifats
@Bonifats Автор вопроса
Начинающий программист
browser.StringByEvaluatingJavaScriptFromString("(function(doc){ var head = doc.getElementsByTagName('head')[0]; var script = doc.createElement('script'); script.setAttribute('src', 'code.jquery.com/jquery-latest.min.js); head.appendChild(script);})(document);");

Вот такой результат изысканий знакомого, гораздо более опытного программиста. И то после того только, как сменил WebKit.NET на openwebkitsharp сборку.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Neuroware
@Neuroware
Программист в свободное от работы время
Возможно загружать нужно чуть раньше чем "DocumentCompleted", ибо к тому моменту когда он происходит вероятно крашатся другие скрипты, которым jquery нужен был, но это чисто догадки, ибо не зная зачем такое понадобилось ответить трудно. Как вариант можно грузить сорцы страницы, инжектить в нужном месте импорт скрипта и отображать уже "модифицированные" сорцы.
Ответ написан
DmitryITWorksMakarov
@DmitryITWorksMakarov
В первую очередь надо попробовать у webKitBrowser`а дернуть методы Refresh или Update, хотя скорее всего это не должно принести результата, потому что скорее всего WebKit куда-то в свой буфер рендерит и по этим методам просто обновляет экран из буфера.

А зачем вообще нужна такая функциональность к браузере? Если на страничке используется jQuery, то и добавляй, пожалуйста, в страничке его. Если не используется, то и не нужен он. Или подразумевается еще какой-нибудь скрипт до кучи/или вместо грузить? Снифер там или что еще? =)

По идее загрузка и отображение странички в браузере идет, если упрощенно, так: загрузка->построение DOM->рендеринг. Причем современные броузеры делают это потоково, то есть постепенно отображая загруженное, но в некоторых случаях могут и все перерендерить (например при изменении размера окна). В вашем случае нужно вклиниться где-то в процесс загрузки заголовка или добавление в DOM заголовка, но что-то я не увидел в WebKit.NET хуков/событий для такой возможности.

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

Ну а что то похожее на правду можно сделать, если реализовать некий прокси, через который направить http-трафик, на лету искать заголовок и вставлять ваш скрипт.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы