【问题标题】:Javascript Global Variable for Cef Extension ScriptsCef 扩展脚本的 Javascript 全局变量
【发布时间】:2016-03-02 11:44:31
【问题描述】:

首先,我在 gitter 和 github 讨论区和 wiki 页面中搜索过,但仍然没有动静..

所以我第一次在这里问这个问题.....:

最后可能是最好的事情是我尝试将对象暴露给 javascript 范围。 https://github.com/cefsharp/CefSharp/wiki/Frequently-asked-questions#Expose_dotNET

好的,这适用于字符串类型的对象。但是我有一个复杂的对象,里面有几个字符串数组。

我想保留 javascript 变量,让我们在浏览器生命周期中将其称为 var _myFilters 值。

我知道cef扩展,我记得这句话:

扩展扩展类似于窗口绑定,只是它们被加载 进入每一帧的上下文,一旦加载就不能修改。 加载扩展并尝试加载时 DOM 不存在 在扩展加载期间访问 DOM 将导致崩溃。 使用 CefRegisterExtension() 函数注册扩展 应该从 CefRenderProcessHandler::OnWebKitInitialized() 方法。

引自网站:https://bitbucket.org/chromiumembedded/cef/wiki/JavaScriptIntegration

所以我认为这是创建全局 javascript 变量“_myFilters”的最佳位置。它应该在每个浏览器选项卡中都可以访问,但我试过了,并且看到它(参考:“_myFilters”)在每次页面重新加载时都会失去价值。

注册对象是一个选项,但它确实很适合我的复杂 javascript 对象 (_myFilters) ..

browser.RegisterJsObject("bound", new BoundObject());

我试过了,但只适用于字符串、整数等。

我打算公开一个“对象”(参考:_myFilters)数据类型,但这次浏览器崩溃了。

所以问题是:在浏览器 loadstart、load end、beforebrowse 方法上执行 javascript 文件的文件中使用全局变量的最佳方法是什么?

ps:我想要这个,因为创建这个 _myFilters 对象需要一些时间(大约 3 秒)。我想在我的全局值中有它的值,所以我可以在浏览器生命周期中使用它。

ps2:_myFilters 的类型

【问题讨论】:

    标签: javascript c# google-chrome-extension chromium cefsharp


    【解决方案1】:
    1. 如果您希望在浏览器进程终止时也能存储变量,那么我建议您使用像chrome.storage 这样的存储API。

    2. 如果全局变量只需要在浏览器进程的生命周期内维护,我想你可以在background page中设置一个变量

      它在您的扩展程序的整个生命周期内都存在,并且一次只有一个实例处于活动状态。

    3. 另一个选择是使用Event Pages。类似于后台页面,只是在manifest.json中设置persistentfalse即可。

      事件页面仅在需要时加载。当事件页面没有主动做某事时,它会被卸载,释放内存和其他系统资源。

      然后你也可以在事件页面中声明你的全局变量,添加监听runtime.onSuspend以在事件页面即将卸载时使用chrome.storage.local.get()存储全局变量的状态。并且在加载事件页面时还要监听其他事件处理程序,这取决于您的需要,可能是browserAction.onClickedruntime.onMessage,使用chrome.storage.local.set()恢复全局变量状态

    【讨论】:

    • 你非常擅长这种方法。我想让这个功能在基于 chromimum 的浏览器 (cefsharp) 中可用。我的意思是我没有这个方法。 chrome.storage.local.set().. 那是因为我在提问之前已经分享了很多关于 cef 的细节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 2016-03-03
    • 2022-01-21
    • 2016-09-23
    • 1970-01-01
    相关资源
    最近更新 更多