Manipulating WebKit CSS data before loading?
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, apar开发者_StackOverflow社区t 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.
As long as you can keep it under the 10MB limit, there is always stringByEvaluatingJavaScriptFromString and then do some loading of the CSS dynamically.
精彩评论