зеркало из https://github.com/electron/electron.git
fix: missing `fetch`-dependent interfaces in Node.js (#42453)
fix: missing fetch-dependent interfaces in Node.js Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
This commit is contained in:
Родитель
931f4b8dec
Коммит
68dfa0440a
|
@ -3,8 +3,11 @@ import { wrapFsWithAsar } from './asar-fs-wrapper';
|
|||
wrapFsWithAsar(require('fs'));
|
||||
|
||||
// See ElectronRendererClient::DidCreateScriptContext.
|
||||
if ((globalThis as any).blinkFetch) {
|
||||
globalThis.fetch = (globalThis as any).blinkFetch;
|
||||
if ((globalThis as any).blinkfetch) {
|
||||
const keys = ['fetch', 'Response', 'FormData', 'Request', 'Headers'];
|
||||
for (const key of keys) {
|
||||
(globalThis as any)[key] = (globalThis as any)[`blink${key}`];
|
||||
}
|
||||
}
|
||||
|
||||
// Hook child_process.fork.
|
||||
|
|
|
@ -110,19 +110,25 @@ void ElectronRendererClient::DidCreateScriptContext(
|
|||
base::BindRepeating(&ElectronRendererClient::UndeferLoad,
|
||||
base::Unretained(this), render_frame));
|
||||
|
||||
v8::Local<v8::Object> global = renderer_context->Global();
|
||||
v8::MaybeLocal<v8::Value> fetch =
|
||||
global->Get(renderer_context, gin::StringToV8(env->isolate(), "fetch"));
|
||||
|
||||
// We need to use the Blink implementation of fetch in the renderer process
|
||||
// Node.js deletes the global fetch function when their fetch implementation
|
||||
// is disabled, so we need to save and re-add it after the Node.js environment
|
||||
// is loaded. See corresponding change in node/init.ts.
|
||||
if (!fetch.IsEmpty()) {
|
||||
global
|
||||
->Set(renderer_context, gin::StringToV8(env->isolate(), "blinkFetch"),
|
||||
fetch.ToLocalChecked())
|
||||
.Check();
|
||||
v8::Isolate* isolate = env->isolate();
|
||||
v8::Local<v8::Object> global = renderer_context->Global();
|
||||
|
||||
std::vector<std::string> keys = {"fetch", "Response", "FormData", "Request",
|
||||
"Headers"};
|
||||
for (const auto& key : keys) {
|
||||
v8::MaybeLocal<v8::Value> value =
|
||||
global->Get(renderer_context, gin::StringToV8(isolate, key.c_str()));
|
||||
if (!value.IsEmpty()) {
|
||||
std::string blink_key = "blink" + key;
|
||||
global
|
||||
->Set(renderer_context, gin::StringToV8(isolate, blink_key.c_str()),
|
||||
value.ToLocalChecked())
|
||||
.Check();
|
||||
}
|
||||
}
|
||||
|
||||
// If we have disabled the site instance overrides we should prevent loading
|
||||
|
|
Загрузка…
Ссылка в новой задаче