Cocoa 在加载之前操作WebKit CSS数据?

Cocoa 在加载之前操作WebKit CSS数据?,cocoa,macos,webkit,Cocoa,Macos,Webkit,在WebKit中解析CSS数据之前,是否可以对其进行操作 我尝试过使用委托方法 - (NSURLRequest *)webView:(WebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse from

在WebKit中解析CSS数据之前,是否可以对其进行操作

我尝试过使用委托方法

- (NSURLRequest *)webView:(WebView *)sender
                 resource:(id)identifier
          willSendRequest:(NSURLRequest *)request
         redirectResponse:(NSURLResponse *)redirectResponse
           fromDataSource:(WebDataSource *)dataSource
我可以通过写下我操纵的CSS,然后返回指向它的替代请求来实现。这很好,除了DOM树包含被操纵的URL请求的路径,而不是原始路径,这对我的应用程序来说是个坏消息


在解析数据之前,我可以操作内存中的数据吗?

只要你能将其保持在10MB的限制之下,总是会有一些,然后再执行一些操作

只要加载一个用户样式表来覆盖你想要的CSS(这是CSS的“级联”部分)。这是WebKit的核心功能

例如,在实践中,你可以看看PandoraBoy's,它有挂钩(尽管我最终不需要实际使用它们)。查看
-awakeFromNib


编辑:如果你真的需要用一种对WebKit完全透明的方式来替换你自己的CSS文件,这是可能的,但这需要更多的工作,更容易混淆,而且通常不需要。也就是说,潘多拉男孩确实遇到了这个问题,而且有一个解决方案。看看。

你是在加载/创建你自己的CSS,还是这需要对任何URL起作用?任何任意CSS文件,通常是从磁盘加载的(我不想修改原始CSS文件),我需要操作现有的CSS,而不是添加我自己的,这是一个非常奇怪的问题!照Rob Napier说的做,“CSS”中的“C”意味着任何东西都可以被重写,你不必重写任何听起来有趣的东西,但不太确定我会在哪里使用它,通过委托?NSURL协议在WebKit层之下。在进行web访问之前,请调用[NSURLProtocol registerClass:[ResourceURLProtocol class]],然后将ResourceURLProtocol插入链中,用于每个基于URL的请求(即WebKit)。您需要学习NSURL协议上的文档。这是一个强大的工具;我不建议将其用于诸如覆盖CSS之类的非正式问题,这更容易通过用户样式表来完成。但是,如果您需要真正控制低级URL获取过程,那么这是值得学习的。