首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用书签注入jQuery不工作在页面上

使用书签注入jQuery不工作在页面上
EN

Stack Overflow用户
提问于 2019-10-20 06:35:29
回答 1查看 211关注 0票数 3

我试着用这个书签:

代码语言:javascript
复制
javascript:void((function(doc){if(typeof jQuery=='undefined'){var script_jQuery=document.createElement('script');script_jQuery.setAttribute('src','https://code.jquery.com/jquery-latest.min.js');document.body.appendChild(script_jQuery);console.log('jQuery included ^_^');}else{console.log('jQuery already included ...');}})(document));

若要将jQuery注入此页面,请执行以下操作:

代码语言:javascript
复制
https://cn.bing.com/dict/?mkt=zh-cn&q=test

我打开页面,然后打开开发者控制台(我正在使用Chrome),切换到网络选项卡,然后点击书签,我注意到Chrome没有请求https://code.jquery.com/jquery-latest.min.js,而是请求以下网址:

代码语言:javascript
复制
https://cn.bing.com/fd/ls/l?IG=EE977A4E38924F57B34A1371C04323C1&Type=Event.ClientInst&DATA=[{%22T%22:%22CI.AntiMalware%22,%22FID%22:%22CI%22,%22Name%22:%22AC%22,%22Text%22:%22S%3Ahttps%3A//code.jquery.com/jquery-latest.min.js%22}]

有人知道为什么书签在这个页面上不起作用吗?此页面如何重定向请求?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-20 06:41:11

如果您运行的话,您可以看到那个特定的站点有猴子类型的appendChild

代码语言:javascript
复制
document.body.appendChild.toString()

进入控制台:它给了你

代码语言:javascript
复制
function(n){return t(n,"AC")?u.apply(this,arguments):null}

作为回报,而不是[native code],这意味着本机函数已被覆盖。

请注意,修补的原型对象是Element.prototype,但是appendChild本机存在于Node.prototype上,它仍然没有修补:

代码语言:javascript
复制
Node.prototype.appendChild.toString()
// gives function appendChild() { [native code] }

您可以选择.call未修补的appendChild

代码语言:javascript
复制
(function(doc) {
  if (typeof jQuery == 'undefined') {
    var script_jQuery = document.createElement('script');
    script_jQuery.setAttribute('src', 'https://code.jquery.com/jquery-latest.min.js');
    Node.prototype.appendChild.call(
      document.body,
      script_jQuery
    );
    console.log('jQuery included ^_^');
  } else {
    console.log('jQuery already included ...');
  }
})(document)

然后它将被成功地附加。(然后,typeof jQuery将计算为function而不是undefined,您可以看到从网络选项卡中请求了正确的URL )

如果站点对其进行了正确的修补,并且所有对Node.prototype.appendChild的引用都无法访问,那么唯一的解决方案就是在页面的Javascript运行之前运行您自己的Javascript,这可以使用像坦帕猴@run-at document-start这样的用户脚本管理器来完成,并且在被覆盖之前使用即时脚本注入保存对Node.prototype.appendChild的引用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58470603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档