2010-01-04 4 views
4

Можно ли манипулировать данными CSS перед его анализом в WebKit?Манипулирование данными WebKit CSS перед загрузкой?

Я попытался с помощью метода делегата

- (NSURLRequest *)webView:(WebView *)sender 
       resource:(id)identifier 
      willSendRequest:(NSURLRequest *)request 
     redirectResponse:(NSURLResponse *)redirectResponse 
      fromDataSource:(WebDataSource *)dataSource 

, который я могу сделать работу, записывая свой манипулируют CSS, а затем возвращая альтернативный NSURLRequest, указывающего на него. Это отлично работает, кроме дерева DOM, затем содержит путь к управляемому URLRequest, а не оригиналу, что является плохим новостям для моего приложения.

Могу ли я манипулировать данными в памяти перед его анализом?

+0

Вы загружаете/создаете свой собственный CSS или вам нужно работать для любого URL-адреса? –

+0

Любой произвольный файл CSS, обычно загружаемый с диска (я не хочу изменять исходный файл CSS) –

ответ

2

Просто загрузите таблицу стилей пользователя, чтобы переопределить любые CSS вы хотите (это «каскадных» часть CSS). Это основная особенность WebKit.

WebPreferences setUserStyleSheetEnabled:

Для примера это на практике, вы можете посмотреть на PlayerController PandoraBoy, который имеет крючки для него (хотя я завелся не нуждаясь на самом деле их использовать). Смотрите в -awakeFromNib.

EDIT: Если вам действительно нужно подставить свой собственный CSS-файл для оригинала таким образом, который полностью прозрачен для WebKit, это возможно, но это немного больше работы, более запутанной и, как правило, не требуется. Тем не менее, PandoraBoy столкнулся с этой проблемой, и есть решение. Посмотрите на ResourceURLProtocol.

+0

Это звучит интересно, не совсем уверен, где я его использую, хотя через делегата ? –

+0

NSURLProtocols находятся под слоем WebKit. Перед созданием веб-доступа вы вызываете [NSURLProtocol registerClass: [ResourceURLProtocol class]], а затем ResourceURLProtocol будет вставлен в цепочку для каждого запроса на основе URL (т. Е. WebKit). Вам нужно будет изучить документы в NSURLProtocol. Это мощный инструмент; Я не рекомендую его для случайных вопросов, таких как переопределение CSS, которые легче выполнять с помощью таблицы стилей пользователя. Но если вам нужно действительно контролировать процесс получения URL-адресов на низкоуровневом уровне, то это стоит изучить. –

+0

ah gotcha! Дайте это, спасибо большое! –

0

Пока вы можете держать его под пределом 10MB, всегда stringByEvaluatingJavaScriptFromString, а затем сделать некоторые loading of the CSS dynamically.

+0

Мне нужно манипулировать существующим CSS, а не добавлять свои собственные, это очень странная проблема! –

+0

Делайте то, что говорит Роб Нейпир: «C» в «CSS» означает, что все можно переопределить, вам не нужно переписывать ничего – slf

Смежные вопросы