javascript - 如何更改Firefox Javascript引擎规则?错误处理

标签 javascript firefox browser error-handling gecko

function hasLiedAboutBrowser()
{
  // Assume browser is Firefox but user agent fakes Google Chrome browser
  var browser = 'Chrome';
  // We create an error to see how it is handled
  var errFirefox;
  try
  {
    // eslint-disable-next-line no-throw-literal
    throw 'a';
  }
  catch (err)
  {
    try
    {
      console.log('before err.toSource() line'); // This line will work on every browser
      err.toSource();
      console.log('after err.toSource() line'); // This line will work only on Firefox browser
      errFirefox = true; // This line will work only Firefox browser
    }
    catch (errOfErr)
    {
      // if err.toSource() throws an exception browser is not a firefox.
      errFirefox = false;
    }
  }
  if (errFirefox && browser !== 'Firefox' && browser !== 'Other')
  {
    console.log("You lied about your browser.");
  } 
  else
  {
    console.log("All fine");
  }
}
hasLiedAboutBrowser();

此代码告诉我们用户何时对浏览器撒谎。

我需要的是“更改firefox javascript错误处理规则”,以便firefox将像其他浏览器一样处理错误

我怎样才能做到这一点?

1-)从源代码编译Firefox? (可能的话,规则在哪里?)

2-)更改omni.ja存档文件上的一些javascript代码? (不见得)

任何想法如何做到这一点?

最佳答案

Firefox在toSource上定义了String,因此只需使其未定义即可:

String.prototype.toSource = undefined;

document.getElementsByTagName('button')[0].addEventListener('click', hasLiedAboutBrowser);
document.getElementsByTagName('button')[1].addEventListener('click', function() {
  String.prototype.toSource = undefined;
  console.log('removed toSource from string prototype');
});

function hasLiedAboutBrowser() {
  // Assume browser is Firefox but user agent fakes Google Chrome browser
  var browser = 'Chrome';
  // We create an error to see how it is handled
  var errFirefox;
  try {
    // eslint-disable-next-line no-throw-literal
    throw 'a';
  } catch (err) {
    try {
      console.log('before err.toSource() line'); // This line will work on every browser
      err.toSource();
      console.log('after err.toSource() line'); // This line will work only on Firefox browser
      errFirefox = true; // This line will work only Firefox browser
    } catch (errOfErr) {
      // if err.toSource() throws an exception browser is not a firefox.
      errFirefox = false;
    }
  }
  if (errFirefox && browser !== 'Firefox' && browser !== 'Other') {
    console.log("You lied about your browser.");
  } else {
    console.log("All fine");
  }
}
<button>Check Browser</button>
<button>remove toSource</button>

关于javascript - 如何更改Firefox Javascript引擎规则?错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47230824/

相关文章:

java - 在 Intellij Idea CE 中单击运行按钮后如何打开浏览器?

javascript - 遍历具有特定类的每个对象,对除触发事件的对象之外的所有对象执行一些 css

javascript - JS 中如何使用变量的困惑

python - 以编程方式读取 firefox 缓存

c# - 使用没有 url 的 WebBrowser 自动下载文件

c# - 唯一标识一个浏览器共享 session 状态的两个实例?

javascript - 脚本文件未在 Android Webview 自定义渲染器中加载

javascript - 是否可以通过 npm(而不是 yarn )打包 Electron-builder?

css - 样式无法在 Firefox 中正确加载

delphi - 如何抓取从 Firefox 拖动的图像?