我想根据资源类型控制资源下载,如css,script,img等。
我正在测试从loacl加载html并使用WebkitGtk操作DOM的东西。 我可以通过WebkitGtk从本地文件加载html。
但是如您所知,有下载资源,如img,css或脚本。我根本不想下载这些。 对于img和脚本,我可以通过设置WebKitWebSettings(WebkitGtk)来实现。
但是没有办法在WebKitWebSettings中阻止css。 所以我试着挂钩“资源请求启动”信号。
static void loadStatusCb(WebKitWebView *web_view, GParamSpec *pspec, void* context);
我可以通过挂钩来阻止所有网络请求。 但我不想阻止所有资源下载。 我想阻止取决于类型(css,script,img,...)
例如,如果test_file请求来自
<link type="text/css" rel="stylesheet" href="http://test.com/test_file">
我会阻止。因为它是css。
但是来自
<script type="text/javascript" src="http://test.com/test_file"></script>
我不会阻止。
我试图从WebKitWebRequest的SoupMessage获取任何信息。但我无法得到任何信息,但不是uri。
如果您知道任何方法,请回复。 提前谢谢。
答案 0 :(得分:0)
resource-request-starting
信号接受几个参数,其中一个参数对您非常有用:WebKitWebResource
类的对象,该类具有方法webkit_web_resource_get_mime_type
。
您需要遵循WebKitGtk+ documentation:
中描述的resource-request-starting
信号处理程序原型
void user_function (WebKitWebView *webView,
WebKitWebFrame *web_frame,
WebKitWebResource *web_resource,
WebKitNetworkRequest *request,
ebKitNetworkResponse *response,
gpointer user_data)
答案 1 :(得分:0)
您可以连接到WebView的“mime-type-policy-decision-requested”信号。
在回调中,检查mimetype是否不合适,然后将策略决策设置为IGNORE,然后返回TRUE,这意味着您处理了信号。我手边有一个python解决方案:
def __mime_type_policy_cb(self, webview, frame, request, mimetype,
policy_decision):
"""Handle downloads and PDF files."""
if mimetype == 'application/pdf':
self.emit('open-pdf', request.get_uri())
policy_decision.ignore()
return True
答案 2 :(得分:0)
正如善良的eagleoneraptor所说,你需要遵循resource-request-starting
信号,但我想你需要一个完整的解决方案。主要想法是在发送之前获取请求,并通过WebKitNetworkRequest.set_uri(str)
将其设置为您想要的内容或about:blank
。这是它的样子:
def test(web_view, frame, web_resource, request, response):
print request.get_uri()
if (YOUR_CONDITION_BASED_ON_URI):
request.set_uri('about:blank')
web_view.connect('resource-request-starting', test)