2010-01-04 25 views
4

CSSK數據在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工作? – 2010-01-05 00:13:52

+0

任何任意的CSS文件,通常從磁盤加載雖然(我不想修改原始的CSS文件) – 2010-01-05 10:26:13

回答

2

只需要加載一個用戶樣式表覆蓋任何你想要的CSS(這是CSS的「級聯」部分)。這是WebKit的核心功能。

WebPreferences setUserStyleSheetEnabled:

爲了在實踐中的這個例子,你可以看看PandoraBoy的PlayerController這對於它鉤(雖然彼時我不需要實際使用它們)。看看-awakeFromNib

編輯:如果您確實需要以對WebKit完全透明的方式替換您自己的原始CSS文件,這是可能的,但它有點多,更容易混淆,而且通常不需要。也就是說,PandoraBoy確實遇到了這個問題,並且有一個解決方案。看看ResourceURLProtocol

+0

這聽起來很有趣,不太清楚我在哪裏使用它,通過代理? – 2010-01-07 14:26:13

+0

NSURLProtocols位於WebKit層下面。在進行網絡訪問之前,您需要調用[NSURLProtocol registerClass:[ResourceURLProtocol class]],然後ResourceURLProtocol將被插入到每個基於URL的請求(即WebKit)的鏈中。你需要研究NSURLProtocol上的文檔。這是一個強大的工具;我不推薦將它用於重寫CSS等隨意問題,這更容易通過用戶樣式表完成。但是,如果您需要真正控制低級URL獲取過程,那麼值得學習。 – 2010-01-07 17:17:05

+0

啊!會放棄這一點,非常感謝! – 2010-01-08 11:12:24

0

只要你能保持在10MB上限,總有stringByEvaluatingJavaScriptFromString,然後做一些loading of the CSS dynamically.

+0

我需要操縱現有的CSS,不加我自己的,這是一個非常奇怪的問題! – 2010-01-06 11:04:03

+0

按照Rob Napier的說法 - 「CSS」中的「C」意味着任何東西都可以被覆蓋,你不應該重寫任何東西 – slf 2010-01-06 13:49:04