【问题标题】:How to change firefox javascript engine rules? Error handling如何更改 Firefox javascript 引擎规则?错误处理
【发布时间】:2017-11-10 20:43:35
【问题描述】:
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 代码? (不太可能)

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

【问题讨论】:

    标签: javascript firefox browser error-handling gecko


    【解决方案1】:

    Firefox 在String 上定义了toSource,所以只需将其设为未定义:

    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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      • 2011-12-01
      • 2011-09-23
      • 2010-09-10
      • 1970-01-01
      相关资源
      最近更新 更多