9.x
macOS 10.15.x
通过contextBridge.exposeInMainWorld暴露API不应该产生副作用。
contextBridge.exposeInMainWorld
使用具有get属性的对象调用此方法会触发它。这使得例如无法进行懒加载示例化。
get
contextBridge.exposeInMainWorld('vscode',{ get something(): { console.log("accessed"); } });
bvjxkvbb1#
contextBridge目前不支持getter和setter。有一种模式下它支持(我们内部用于某些事情),但这种模式切换不是通过API暴露的。这是否是一个硬性要求,将其作为getter属性而不是方法。公开支持getter和setter将增加更多的API成本,但也不是太难去暴露。
7vux5j2d2#
@MarshallOfSound :不,我认为我现在有一个解决方法,通过切换到函数来实现。
kyxcudwk3#
我认为当你在发明一个全新的API时,"绕过"缺少getter和setter并不是那么困难。但是如果你在使用现有的API,编写一个 Package 器会变得非常耗时且令人沮丧。更糟糕的是,记住如何在不同运行位置(主线程、预加载、渲染器)获取和设置属性的心理负担是令人筋疲力尽的。并非所有的API都是安全威胁。请考虑公开支持getter和setter。
vql8enpb4#
从Electron 8切换到Electron 18,并在共享窗口的全局作用域中使用contextBridge而不是共享的动态对象,而不使用getter和setter选项给我们带来了一些令人遗憾的头痛,这对于在webviews中运行的现有应用程序的向后兼容性来说是不利的。是的,如果getter/setter可用,我们会更好。
c0vxltue5#
这个问题已经被自动标记为过时。如果这个问题仍然影响到你,请留下任何评论(例如“提升”),我们会保持开放。如果你有任何新的附加信息——特别是,如果这个问题在 latest version of Electron 或 beta 中仍然可复现——请在你的评论中包含它!
lxkprmvk6#
这个问题由于不活跃而被关闭,将不再被监控。如果这是一个错误并且您可以在支持的Electron版本上重现此问题,请打开一个新问题并包括重现问题的说明。
c0vxltue7#
我不清楚这方面是否有什么变化可以解决这个问题,@MarshallOfSound 请重新打开。
nxowjjhe8#
@bpasero,您可以在第一次警告后的30天内通过注解来防止这些关闭。我认为无论如何都应该将其标记为增强功能,所以我可以重新打开这个。
des4xlb09#
我目前正在尝试通过预加载集成第三方库,并广泛利用setter/getter。为了解决这个问题,我不得不包含一个遍历示例的hack,这相当肮脏:
let thing = /* ... */ contextBridge.exposeInMainWorld('thingWalker', (path: string[]) : any => { // sanitize/validate path // walk lib let cursor = thing; while (path) cursor = cursor[path.shift()]; return cursor; });
我尝试过的其他方法都不行:
contextBridge.expose...(name, () => thing);
9条答案
按热度按时间bvjxkvbb1#
contextBridge目前不支持getter和setter。有一种模式下它支持(我们内部用于某些事情),但这种模式切换不是通过API暴露的。
这是否是一个硬性要求,将其作为getter属性而不是方法。公开支持getter和setter将增加更多的API成本,但也不是太难去暴露。
7vux5j2d2#
@MarshallOfSound :不,我认为我现在有一个解决方法,通过切换到函数来实现。
kyxcudwk3#
我认为当你在发明一个全新的API时,"绕过"缺少getter和setter并不是那么困难。但是如果你在使用现有的API,编写一个 Package 器会变得非常耗时且令人沮丧。更糟糕的是,记住如何在不同运行位置(主线程、预加载、渲染器)获取和设置属性的心理负担是令人筋疲力尽的。
并非所有的API都是安全威胁。
请考虑公开支持getter和setter。
vql8enpb4#
从Electron 8切换到Electron 18,并在共享窗口的全局作用域中使用contextBridge而不是共享的动态对象,而不使用getter和setter选项给我们带来了一些令人遗憾的头痛,这对于在webviews中运行的现有应用程序的向后兼容性来说是不利的。
是的,如果getter/setter可用,我们会更好。
c0vxltue5#
这个问题已经被自动标记为过时。如果这个问题仍然影响到你,请留下任何评论(例如“提升”),我们会保持开放。如果你有任何新的附加信息——特别是,如果这个问题在 latest version of Electron 或 beta 中仍然可复现——请在你的评论中包含它!
lxkprmvk6#
这个问题由于不活跃而被关闭,将不再被监控。如果这是一个错误并且您可以在支持的Electron版本上重现此问题,请打开一个新问题并包括重现问题的说明。
c0vxltue7#
我不清楚这方面是否有什么变化可以解决这个问题,@MarshallOfSound 请重新打开。
nxowjjhe8#
@bpasero,您可以在第一次警告后的30天内通过注解来防止这些关闭。我认为无论如何都应该将其标记为增强功能,所以我可以重新打开这个。
des4xlb09#
我目前正在尝试通过预加载集成第三方库,并广泛利用setter/getter。为了解决这个问题,我不得不包含一个遍历示例的hack,这相当肮脏:
我尝试过的其他方法都不行:
contextBridge.expose...(name, () => thing);