我用的是Ubuntu 14.04。
我已经安装了管道 -这个NPAPI浏览器插件允许我查看Silverlight &火狐中基于Flash的新东西。
然而,这有一个不幸的副作用-所有支持NPAPI插件的浏览器,如WebKit,也加载这个插件。
在程序上,我想在创建WebKit.WebView时禁用所有浏览器插件--这就是我的问题所在。我该怎么做?
调查:
我考虑过使用WebKit2 --这可能是因为WebKit2不支持NPAPI。但是,我不能使用这个方法,因为Rhythmbox默认有另一个本地插件,即WebKit,即我正在创建另一个Rhythmbox插件。当我尝试同时加载WebKit.WebView和WebKit2.WebView时,进程将挂起。
我已经看过如何使用WebKit.WebSettings及其启用插件属性,但似乎在创建WebView之后(因此已经加载了管道浏览器插件),才能应用新的WebSettings实例。
再次-我尝试通过构造函数分配新的WebSettings实例,但是没有joy:x = WebKit.WebView(settings=webkit_settings)
当您安装了管道时,一个简单的测试程序(web.py)显示了以下问题:
from gi.repository import WebKit
webkit_settings = WebKit.WebSettings.new()
webkit_settings.props.enable_plugins=False
x = WebKit.WebView.new()
x.set_settings(webkit_settings)然后运行python web.py将显示一个示例输出
[PIPELIGHT:LIN:unknown] attached to process.
[PIPELIGHT:LIN:unknown] checking environment variable PIPELIGHT_SILVERLIGHT5_0_CONFIG.
[PIPELIGHT:LIN:unknown] searching for config file pipelight-silverlight5.0.
[PIPELIGHT:LIN:unknown] trying to load config file from '/home/foss/.config/pipelight-silverlight5.0'.
[PIPELIGHT:LIN:unknown] unrecognized configuration key 'diagnosticmode'.
[PIPELIGHT:LIN:unknown] sandbox not found or not installed!
[PIPELIGHT:LIN:silverlight5.0] using wine prefix directory /home/foss/.wine-pipelight.我已经向管道开发人员介绍了这个问题,他们表示我需要通过WebKit引擎禁用插件。正如您所看到的--我认为WebKit2是我的解决方案,但我不能像上面所说的那样使用它。
我看过这个堆栈过流问题,但实际上我并不是在禁用特定插件之后--至少我不这么认为--只是想禁用所有外部插件
我是用Python3编写这篇文章的,但我认为这里不存在python版本的问题,因为我已经使用python和python3解释器运行了测试程序,并且看到了相同的结果。
发布于 2015-06-09 21:15:12
我编写了自己的access()函数,调用strstr(路径名,"/plugins/");如果返回非空函数,则将errno设置为ENOENT并返回-1。
否则,我的access()将从c库调用原始access() (系统调用包装器)。
在c程序中,这样的函数可以实现,对于其他程序,可以使用单独的c模块和LD_PRELOAD。
就像这样:
static void * dlsym_next(const char * symbol)
{
void * sym = dlsym(RTLD_NEXT, symbol);
char * str = dlerror();
if (str != null)
exit(1);
return sym;
}
#define set_next(name) *(void**)(&name##_next) = dlsym_next(#name)
int access(const char * pathname, int mode)
{
static int (*access_next)(const char *, int) = NULL;
if (! access_next)
set_next(access);
if (strstr(pathname, "/plugins/") != NULL) {
errno = ENOENT;
return -1;
}
return access_next(pathname, mode);
}https://stackoverflow.com/questions/28008870
复制相似问题