【问题标题】:JavaScriptCore in WebKit2Gtk with C?WebKit2Gtk 中的 JavaScriptCore 与 C?
【发布时间】:2017-01-26 19:55:28
【问题描述】:

我无法让 JavaScriptCore 与 WebKit2Gtk 一起工作。在我的 C 应用程序中,我使用 WebKit2Gtk 作为我希望能够访问 C 函数的应用程序的前端。

有几个关于 WebKitGtk(不是 WebKit2 版本)的例子。然而,在邮件列表中有一些信息表明 WebKit2Gtk 的线程性质,它更复杂。不幸的是,我没有找到任何示例。

我在加载回调中写了这段代码:

JSGlobalContextRef jsContext = webkit_web_view_get_javascript_global_context
                                           (WEBKIT_WEB_VIEW(gtk_webview));

JSEvaluateScript(jsContext,JSStringCreateWithUTF8CString
                      ("$('#debuginfo').html('JS API OK')"),0,0,0,0);

不幸的是,WebKit2Gtk 中没有任何事情发生。但是,如果我使用 API 文档中定义的新函数并执行以下操作,我会得到所需的输出。

webkit_web_view_run_javascript(WEBKIT_WEB_VIEW(gtk_webview),
                "$('#debuginfo').html('JS API OK')",NULL,NULL,NULL);

带有 run-javascript-function 的新 API 可以快速执行 JS 代码,但我想允许 WebKit2Gtk 中的 JS 代码执行我可以在我的 C 代码中处理的 JS 函数。

期待您的帮助,因为我有点卡在这件事上,在恢复到 WebKitGtk(不是 WebKit2Gtk 版本,而是以前的版本)之前,我很快想检查你们是否对如何实现它有任何想法.

【问题讨论】:

    标签: javascript c webkit gtk webkit2


    【解决方案1】:

    WebKitGTK 版本 1 是单进程,它允许您监听 window-object-cleared 信号并获取全局 javascript 上下文和 add your javascript 对象到全局上下文。

    WebKitGTK 版本 2 是多进程的,因此从您创建 WebKitWebView 对象的同一进程获取全局 javascript 上下文将不再有效,因为 javascript 是在另一个进程中评估的。为了extend Javascript,您必须创建一个WebKitWebExtension (shared library) 来表示您的WebKitWebView 实例loads

    当您调用 webkit_web_view_run_javascript 时它在您的情况下工作的可能原因是您的 javascript 对象仅在当前进程中创建和评估。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      相关资源
      最近更新 更多