0

我有一个在 Linux 上使用 WebKitGTK1 API 和 WebKit-GTK 2.4.9 的应用程序。(这是 Debian Jessie 中的当前版本,2.5+ 版本不支持 v1 API。)

我已经实现了一个自定义 URI 方案,用于使用resource-request-starting处理程序加载整个基本页面内容,该处理程序通过解析传入的 URI webkit_web_resource_get_uri,如果它与自定义方案匹配,则生成一些 HTML 内容并调用webkit_network_request_set_uri以用 base64 的 URI 替换原始data:URI包含要呈现的内容。(这类似于这个问题的公认答案。)

这通常运行良好,并且我的处理程序在每个请求(包括具有相同原始 URI 的重复请求)上调用并生成正确的内容——但在上游某处,浏览器似乎只呈现任何给定原始 URI 的第一个返回数据,甚至如果我生成的数据 URI 不同。

可能需要注意的是,即使在调用之后也会webkit_web_resource_get_uri返回原始的非URI ,所以我假设这个 URI 正在被缓存,然后被用作某些更高级别组件中的键来缓存数据,而不是使用真正的URI从请求中。data:webkit_network_request_set_uri

不幸的是,这似乎是一个G_PARAM_CONSTRUCT_ONLY属性,并且似乎没有任何公共 API 可以设置和/或清除它,以便它使用重写的请求 URI。无论如何,有什么方法可以强制 GTK 在施工后设置属性?据我所知,它在内部确实有一个 setter 方法,如果内部属性被重置为 NULL,getter 会做正确的事情。

或者是否有更好的方法来强制 WebKit 呈现新的data:URI,尽管它认为相反?


目前,我通过在原始自定义 URI 中包含使其生成不同数据的值(传递到webkit_web_view_load_uri生成页面中的链接或在生成页面中的链接中)来解决它。这确实有效,但有点难看,如果我以后忘记添加一些东西,或者如果某些东西改变了生成但事先不知道,可能会出现问题。似乎有点愚蠢,它费尽心思引发生成正确数据的事件,只是稍后将其丢弃,(大概)由于对错误 URI 的 URI 比较。

我想使用已知的唯一值(例如,顺序递增的 id)也可以,并解决一些预先未知的问题,但这同样丑陋。

4

0 回答 0