访问 Node.js URL 对象的 "Symbol(context)" 属性
Get access to "Symbol(context)" properties of Node.js URL object
在 WebStorm 中调试时,URL 对象有一个条目 Symbol(context)
:
有没有办法使用 URL 对象访问这些属性?
查找对象的符号属性
方法 Object.getOwnPropertySymbols()
returns 符号数组,可让您找到给定对象的符号属性。请注意,每个对象都在初始化时没有自己的符号属性,因此除非您在对象上设置符号属性,否则此数组将为空。
如果您使用的是 Electron,这可能是由于试图将 url 模块暴露给渲染器造成的。例如。我在 preload.js
中有以下代码:
const url = require('url');
contextBridge.exposeInMainWorld('nodeUrl', url);
然后在我的渲染器中,我尝试将 URL 获取到我试图使用以下代码加载的文件:
const absoluteFilename = '/Users/myuser/Desktop/test.png';
const fileUrl = nodeUrl.pathToFileURL(absoluteFilename)
console.log(fileUrl); // {Symbol(context), Symbol(query)}
这行不通 因为 Electron can not bridge symbols.
为了解决这个问题,我围绕 pathToFileURL
创建了一个包装器,它返回一个字符串并在 preload.js
中公开它:
const url = require('url');
const pathToFileURL = (filename) => url.pathToFileURL(filename).toString();
contextBridge.exposeInMainWorld('pathToFileURL', pathToFileURL);
在 WebStorm 中调试时,URL 对象有一个条目 Symbol(context)
:
有没有办法使用 URL 对象访问这些属性?
查找对象的符号属性
方法 Object.getOwnPropertySymbols()
returns 符号数组,可让您找到给定对象的符号属性。请注意,每个对象都在初始化时没有自己的符号属性,因此除非您在对象上设置符号属性,否则此数组将为空。
如果您使用的是 Electron,这可能是由于试图将 url 模块暴露给渲染器造成的。例如。我在 preload.js
中有以下代码:
const url = require('url');
contextBridge.exposeInMainWorld('nodeUrl', url);
然后在我的渲染器中,我尝试将 URL 获取到我试图使用以下代码加载的文件:
const absoluteFilename = '/Users/myuser/Desktop/test.png';
const fileUrl = nodeUrl.pathToFileURL(absoluteFilename)
console.log(fileUrl); // {Symbol(context), Symbol(query)}
这行不通 因为 Electron can not bridge symbols.
为了解决这个问题,我围绕 pathToFileURL
创建了一个包装器,它返回一个字符串并在 preload.js
中公开它:
const url = require('url');
const pathToFileURL = (filename) => url.pathToFileURL(filename).toString();
contextBridge.exposeInMainWorld('pathToFileURL', pathToFileURL);