<!--  As an open source project with a dedicated but small maintainer team, it can sometimes take a long time for issues to be addressed so please be patient and we will get back to you as soon as we can.
-->

### Preflight Checklist
<!-- Please ensure you've completed the following steps by replacing [ ] with [x]-->

* [x] I have read the [Contributing Guidelines](https://github.com/electron/electron/blob/master/CONTRIBUTING.md) for this project.
* [x] I agree to follow the [Code of Conduct](https://github.com/electron/electron/blob/master/CODE_OF_CONDUCT.md) that this project adheres to.
* [x] I have searched the issue tracker for an issue that matches the one I want to file, without success.

### Issue Details

* **Electron Version:**
  * 11.2.1, also verfied on Electron 10.2.x and 9.0.0
* **Operating System:**
  * verified on MacOS 10.14.6, MacOS 11.1, Debian 4.19.160-2, and Debian 5.9.15
* **Last Known Working Electron version:**
Electron 8.5.5 works.

### Expected Behavior
Page sucessfully loads and js continues running normally.

### Actual Behavior
The render window completely hangs partway through loading, is unresponsive to all input including the developer console, and can only be killed from the main process, or by killing the main process. When loading for the first time, there's no output in the developer console, but when reloading an intermittent form of the bug (by wrapping the node-ipc connectTo call in an async function with a delay) following stack trace is sometimes displayed: 
![Screen Shot 2021-01-15 at 5 45 55 PM](https://user-images.githubusercontent.com/9359101/105620751-076d4f00-5db5-11eb-99bf-336a2e12f99f.png). Although the error is displayed as being on line 1 of my html file, line 1 is simply `<html>`, so that's obviously not correct. 


### To Reproduce
<!--
Your best chance of getting this bug looked at quickly is to provide an example.
-->
Install [this minimal example project. ](https://github.com/Patronics/example-electron-hang) by runing

```sh
$ git clone https://github.com/Patronics/example-electron-hang.git
$ npm install
$ npm start
```
Notice that when running the app, the big iframe's contents never load, and the app is unresponsive to the normal keyboard shortcuts to interact with it (Quit, open the, dev tools, etc.). Look at the source code (especially index.html) to see that the JS abruptly stops running, unlike it expected behavior. The comments describe which lines seem necessary to trigger the bug, and which are just to demonstrate the behavior.

<!--
If you provide a URL, please list the commands required to clone/setup/run your repo e.g.
```sh
$ git clone $YOUR_URL -b $BRANCH
$ npm install
$ npm start || electron .
```
-->

### Screenshots
<!-- If applicable, add screenshots to help explain your problem. -->

### Additional Information

I'm submitting the issue here as well as node-ipc's repository, as the issue seems to be in the interaction of the two codebases. However, the set of unique circumstances in the electron configuration needed to cause this, as well as the fact that the normal debugging tools like the developer console are rendered non-functional, would seem to indicate that the issue is primarly regarding electron, and not node-ipc. The fact that electron 8.5.5 and eariler don't have this issue would seem to confirm that conclusion.
<!-- Add any other context about the problem here. -->

shell/common/node_bindings.cc
const std::set<std::string> disallowed = {
      "--openssl-config", "--use-bundled-ca", "--use-openssl-ca",
      "--force-fips", "--enable-fips"};
  
  const std::set<std::string> allowed_in_packaged = {"--max-http-header-size",
                                                     "--http-parser"};
  if (env->HasVar("NODE_OPTIONS")) {
    std::string options;
    env->GetVar("NODE_OPTIONS", &options);
    std::vector<std::string> parts = base::SplitString(
        options, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
    bool is_packaged_app = IsPackagedApp();
    for (const auto& part : parts) {
      
      std::string option = part.substr(0, part.find('='));
      if (is_packaged_app &&
          allowed_in_packaged.find(option) == allowed_in_packaged.end()) {
        
        LOG(ERROR) << "Most NODE_OPTIONs are not supported in packaged apps."
                   << " See documentation for more details.";
        options.erase(options.find(option), part.length());
      } else if (disallowed.find(option) != disallowed.end()) {
        
        
        LOG(ERROR) << "The NODE_OPTION " << option
                   << " is not supported in Electron";
        options.erase(options.find(option), part.length());