首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何禁用所有webkit浏览器插件?

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

Stack Overflow用户
提问于 2015-01-18 10:53:01
回答 1查看 692关注 0票数 0

我用的是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)显示了以下问题:

代码语言:javascript
复制
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将显示一个示例输出

代码语言:javascript
复制
[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解释器运行了测试程序,并且看到了相同的结果。

EN

回答 1

Stack Overflow用户

发布于 2015-06-09 21:15:12

我编写了自己的access()函数,调用strstr(路径名,"/plugins/");如果返回非空函数,则将errno设置为ENOENT并返回-1。

否则,我的access()将从c库调用原始access() (系统调用包装器)。

在c程序中,这样的函数可以实现,对于其他程序,可以使用单独的c模块和LD_PRELOAD。

就像这样:

代码语言:javascript
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28008870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档