Cef 扩展脚本的 Javascript 全局变量

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

首先,我在gitter和github讨论板以及wiki页面中进行了搜索,但仍然没有任何进展..

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

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

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

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

我了解cef扩展,在那里我记得这句话:

Extensions Extensions are like window bindings except they are loaded into the context for every frame and cannot be modified once loaded. The DOM does not exist when an extension is loaded and attempts to access the DOM during extension loading will result in a crash. Extensions are registered using the CefRegisterExtension() function which should be called from the CefRenderProcessHandler::OnWebKitInitialized() method.

引自网站: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 的类型

enter image description here

最佳答案

  1. 如果您希望即使在浏览器进程终止时也可以存储变量,那么我建议您使用像chrome.storage这样的存储api .

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

    It exists for the lifetime of your extension, and only one instance of it at a time active.

  3. 另一种选择是使用 Event Pages 。和后台页面类似,设置persistent即可false在manifest.json中。

    Event pages are loaded only when they are needed. When the event page is not actively doing something, it is unloaded, freeing memory and other system resources.

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

关于Cef 扩展脚本的 Javascript 全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35746271/

相关文章:

javascript - 使用 javascript 从 html 搜索文本

javascript - 是否可以禁用网页上的查找功能,而不仅仅是 CTRL + F?

c# - 从 Visual Studio 2010 SP1 中的 VB.NET 项目搜索引用时出现问题

c# - 有没有更有效的方法来获取 C# 中给定日期的前一个星期一

google-chrome-extension - Chrome 扩展程序 - 控制台日志未触发

javascript - 尝试编写一个显示和更改某些对象属性的 JS 脚本

c# - 为演示文稿创建 3D 视频/动画

javascript - 从 google chrome 扩展程序在后台运行音乐

jquery - Chrome 扩展程序 : Opening Jquery Ui Dialog

javascript - 使用 Javascript 或 jQuery 启动和停止 Bootstrap 轮播