Is it possible to manipulate CSS data before it is parsed in WebKit?
I’ve tried using the delegate method
- (NSURLRequest *)webView:(WebView *)sender
resource:(id)identifier
willSendRequest:(NSURLRequest *)request
redirectResponse:(NSURLResponse *)redirectResponse
fromDataSource:(WebDataSource *)dataSource
which I can make work by writing down my manipulated CSS, then returning an alternative NSURLRequest that points to it. This works fine, apart from the DOM tree then contains the path to the manipulated URLRequest, not the original, which is bad news for my app.
Can I manipulate the data in memory before it’s parsed?
Just load a user style sheet to override whatever CSS you want (that’s the “cascading” part of CSS). This is a core feature of WebKit.
WebPreferences setUserStyleSheetEnabled:
For an example of this in practice, you can look at PandoraBoy’s PlayerController which has hooks for it (though I wound up not needing to actually use them). Look in
-awakeFromNib.EDIT: If you really need to substitute your own CSS file for the original in a way that’s totally transparent to WebKit, that’s possible but it’s a bit more work, more confusing, and generally shouldn’t be needed. That said, PandoraBoy did run into this problem, and there’s a solution. Look at ResourceURLProtocol.