ZBLOG

如何hook所有给base href设置值的函数 js

在 JavaScript 中,可以通过重写 document.createElementHTMLAnchorElement.prototype.setAttribute 方法来拦截和 hook 所有对 <base> 标签的设置。以下是一个示例代码,展示了如何实现这一点:

  1. // 保存原始方法
  2. const originalCreateElement = document.createElement;
  3. const originalSetAttribute = HTMLBaseElement.prototype.setAttribute;
  4. // Hook document.createElement
  5. document.createElement = function(tagName) {
  6. const element = originalCreateElement.call(document, tagName);
  7. // 如果创建的是 base 元素,则添加自定义逻辑
  8. if (tagName.toLowerCase() === 'base') {
  9. const originalSetAttr = element.setAttribute.bind(element);
  10. element.setAttribute = function(name, value) {
  11. console.log(`Setting base href to: ${value}`);
  12. // 在这里可以添加更多自定义逻辑
  13. // 调用原始 setAttribute 方法
  14. return originalSetAttr(name, value);
  15. };
  16. }
  17. return element;
  18. };
  19. // Hook HTMLBaseElement.prototype.setAttribute
  20. HTMLBaseElement.prototype.setAttribute = function(name, value) {
  21. if (name.toLowerCase() === 'href') {
  22. console.log(`Setting base href to: ${value}`);
  23. // 在这里可以添加更多自定义逻辑
  24. }
  25. // 调用原始 setAttribute 方法
  26. return originalSetAttribute.call(this, name, value);
  27. };
  28. // 现在所有的 base href 设置都会被记录到控制台中

说明:

  1. 重写 document.createElement:当创建 <base> 元素时,增加额外的逻辑以拦截对 setAttribute 的调用。
  2. 重写 setAttribute 方法:直接重写 HTMLBaseElement.prototype.setAttribute 来捕捉对 href 属性的设置。这允许你在任何地方使用该方法时进行监控。

注意事项:

  • 确保这些 hook 代码在页面加载的早期执行,以便能捕获所有相关调用。
  • 对于其他可能会影响 <base> 标签的方法(例如某些库或框架可能会修改 DOM),请根据需要进一步增强代码。


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=22067

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?