如何禁用所有的webkit浏览器插件?

2024-09-26 18:20:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我用的是Ubuntu 14.04。在

我已经安装了Pipelight这个NPAPI浏览器插件允许我在Firefox中查看Silverlight和基于Flash的新内容。在

然而,这有一个不幸的副作用-所有支持NPAPI插件(如WebKit)的web浏览器也会加载这个插件。在

在程序上,我想禁用所有浏览器插件时,我创建WebKit.WebView-所以我的问题。我该怎么做?在


调查:

我曾经研究过使用WebKit2—这可能是因为WebKit2不支持NPAPI。但是我不能使用这个方法,因为Rhythmbox默认有另一个本地插件WebKit,即我正在创建另一个Rhythmbox插件。当我试图加载两个WebKit.WebView然后进程挂起。在

我已经研究过使用WebKit.WebSettings及其enable-plugins属性,但是在创建WebView之前,您似乎不能应用新的WebSettings实例(因此pipelight浏览器插件已经加载)。在

再一次-我试图通过构造函数分配新的WebSettings实例,但是没有任何乐趣:x = WebKit.WebView(settings=webkit_settings)

当你安装了一个简单的测试程序(网页.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显示

^{pr2}$

我已经将这个question提交给Pipelight开发人员,他们已经指出我需要通过WebKit引擎禁用插件。正如你所看到的-我认为WebKit2是我的解决方案,但我不能像上面所说的那样使用它。在

我见过这个stackoverflow question,但我并不是真的禁用了特定的插件-至少我不这么认为-只想禁用所有外部插件

我是用Python3编写的,但我不认为python版本是这里的问题,因为我使用python和Python3解释器运行了测试程序,并且看到了相同的结果。在


Tags: 实例插件websettingsenableplugins浏览器rhythmbox
1条回答
网友
1楼 · 发布于 2024-09-26 18:20:19

我通过编写自己的access()函数来破解这个问题 调用strstrstr(路径名,“/plugins/”);如果返回非null 并将-errent设置为no。在

否则,my access()调用原始access()(系统调用包装器) 从c库。在

在c程序中,这样的函数可以直接实现,对于其他程序来说 可以使用单独的c模块和LD_预加载。。。在

像这样:

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);
}

相关问题 更多 >

    热门问题