Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何访问站点';是否在不使用unsafeWindow的情况下创建唯一的JavaScript对象?_Javascript_Userscripts - Fatal编程技术网

如何访问站点';是否在不使用unsafeWindow的情况下创建唯一的JavaScript对象?

如何访问站点';是否在不使用unsafeWindow的情况下创建唯一的JavaScript对象?,javascript,userscripts,Javascript,Userscripts,我目前正在尝试编写一个脚本,我将尝试在Chrome的扩展中使用它。我知道这在Chrome中不起作用,所以我找到了一个类似对象功能的变通方法() 以下是链接中的相关代码: var unsafeWindow = (function() { var e1 = document.createElement('p') e1.setAttribute('onclick', 'return window;'); return e1.onclick(); })(); 然后,我可以使用此

我目前正在尝试编写一个脚本,我将尝试在Chrome的扩展中使用它。我知道这在Chrome中不起作用,所以我找到了一个类似对象功能的变通方法()

以下是链接中的相关代码:

var unsafeWindow = (function() {
    var e1 = document.createElement('p')
    e1.setAttribute('onclick', 'return window;');
    return e1.onclick();
})();
然后,我可以使用此函数访问网站的自定义/唯一JavaScript对象及其原型/属性,如下所示:

var newVar = unsafeWindow.WEBSITE.uniqueObject.prototype.uniquePrototype ... etc.
不过,有人告诉我,这种变通方法并不是一种好的做法,只有在没有其他简单方法访问独特对象时才会使用


如果不使用像
unsafeWindow
这样的东西,访问网站独特对象及其原型/属性的更好或更安全的方法是什么?

您可以使用它在浏览器页面和扩展之间安全地发送信息,反之亦然。

我注意到您没有给出一个真实的示例,我不打算涵盖所有假设的可能性;对于各种真实世界的网站,有各种各样的技术

这种安全的跨浏览器几乎每次试用都能正常工作,方法是:

这其中的两个变体也与



然而,想要使用
unsafeWindow
的人最常见的情况似乎是击败广告显示计时器或触发通常由链接或按钮触发的javascript

在公共按钮/链接场景中,不要使用
unsafeWindow
打破沙箱。只是

在欺骗网站计时器的情况下,因为它是一行(不包括黑客),这是一种情况,
unsafeWindow
可能是一个很好的选择。例如:

unsafeWindow.payTheBillsTimerCounter = 0;
注意:

  • 愤怒的站长理论上可以利用
    unsafeWindow
  • 请不要违反任何服务条款(TOS)
  • 请支持您使用(大量)资源的网站
  • 对于Chrome用户脚本和内容脚本,
    unsafeWindow
    hack可能会在Chrome版本28左右被阻止。要在Chrome上直接编写脚本,请切换到。Tampermonkey可能会继续支持
    unsafeWindow
    ,而不需要(您方面)进行任何黑客攻击。
    Tampermonkey还提供了近乎完美的Greasemonkey兼容性和Chrome用户脚本所没有的一系列功能

  • 什么是独一无二的东西,我从没听说过p该网页/网站特有的javascript对象,人们可能会通过访问该对象,我可能感到困惑,但那里的信息表明,消息传递是在脚本和扩展的其余部分之间进行的-但我试图让脚本中的变量或函数访问网站自定义/独特javascript对象的原型/属性,与使用
    unsafeWindow
    一样,您有一个位于该环境中的内容脚本。扩展向内容脚本发出做某事的信号。任务被执行,内容脚本将信息发送回扩展。除非你试图做一些你在问题中没有描述过的奇怪的事情。问题在于“做点什么”部分(除非我误解了
    unsafeWindow
    )-我的脚本有一些函数或变量,我想访问网页自己的脚本,比如“跳过”DOM并从该网页的脚本访问自定义对象属性(因为,如图所示,他们在Chrome中说“孤立世界之间没有共享javascript对象”)。这就是
    unsafeWindow
    或其模拟功能的用武之地。是的,但您想做的是什么,而不是通过消息传递?在过去,我在环境之间、父窗口、iframe和extension:get variables execute函数之间的交互绝对没有问题……OP试图与浏览页面的javascript(他不控制)交互。消息传递最终可能是必需的,但它不能解决当前的问题。如果您只是试图监视和修改AJAX添加的内容,那么这与此问题所提出的问题完全不同!(这也是FAQ强调问题应该与具体的现实世界问题相关的原因。)这个问题已经在许多问题中得到了解决,并且与
    unsafeWindow
    无关,在这种情况下不需要。
    unsafeWindow.payTheBillsTimerCounter = 0;