【发布时间】: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