b3n*_*ng0 6 javascript greasemonkey google-chrome
我现在正在摆弄chrome中的用户脚本,所以请忍受我潜在的无知/白痴.
在我正在编写脚本的页面中,有一个<script>声明变量的元素x.这是否意味着,在我的用户脚本中,我只能x从全局命名空间访问?
例如,如果我的用户脚本中的唯一一行是alert(x);,那应该按预期工作(假设x是一个字符串)?我知道chrome不支持unsafewindow,但由于某种原因,我发现无法弄清楚如何模仿功能.它甚至可能吗?
aln*_*h29 13
这将为您提供对窗口对象的引用(如p):
var p = unsafeWindow;
if(window.navigator.vendor.match(/Google/)) {
var div = document.createElement("div");
div.setAttribute("onclick", "return window;");
p = div.onclick();
};
Run Code Online (Sandbox Code Playgroud)
Bro*_*ams 11
更新:
该onclick漏洞不再适用于最新的Chrome版本.
要获得unsafeWindowChrome中的功能,最好的办法是安装和使用Tampermonkey - 无论如何,您都应该这样做.Tampermonkey完全支持Greasemonkey API和更简单的脚本管理.
Greasemonkey脚本和Tampermonkey脚本几乎总是完全兼容,对于普通的Chrome用户脚本来说并非如此.
放弃Tampermonkey,唯一可行的方法是使用某种形式的脚本注入.
以下内容现已过时:
Chrome现在定义unsafeWindow了userscripts/content-scripts,但Chrome unsafeWindow仍然不允许访问目标页面创建的JS对象.
以下是如何unsafeWindow使用特征检测(好)与浏览器嗅探(错误)的跨浏览器方式提供正确不安全的方法:
/*--- Create a proper unsafeWindow object on browsers where it doesn't exist
(Chrome, mainly).
Chrome now defines unsafeWindow, but does not give it the same access to
a page's javascript that a properly unsafe, unsafeWindow has.
This code remedies that.
*/
var bGreasemonkeyServiceDefined = false;
try {
if (typeof Components.interfaces.gmIGreasemonkeyService === "object") {
bGreasemonkeyServiceDefined = true;
}
}
catch (err) {
//Ignore.
}
if ( typeof unsafeWindow === "undefined" || ! bGreasemonkeyServiceDefined) {
unsafeWindow = ( function () {
var dummyElem = document.createElement('p');
dummyElem.setAttribute ('onclick', 'return window;');
return dummyElem.onclick ();
} ) ();
}
Run Code Online (Sandbox Code Playgroud)
contentWindow在Chrome 3中可用,但在Chrome 4中删除.仅适用于Chrome 4的解决方案:
location.href="javascript:(function(){ alert('Hello'); })()"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7681 次 |
| 最近记录: |