从早期的SO post我发现,为了使Greasemonkey脚本与Chrome兼容,我们必须为jQuery创建脚本元素http://erikvold.com/blog/index.cfm/2010/6/14/using-jquery-with-a-user-script
如果我当前在Firefox中工作正常的用户脚本如下。我应该如何修改它以包含上述方法并仍然在onload上调用该函数?我在哪里将当前代码放在早期帖子中建议的解决方案中?
// ==UserScript==
// @name Google+
// @version 1.1
//
//
// @include http://plus.google.com/*
// @include https://plus.google.com/*
//
// @require https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
$(function()
{
$(window).bind('load', function()
{
console.log("Hi Condition is very bad!")
$('<div id="vdiv"></div>').prependTo('#contentPane');
$('<img>',
{
src: 'http://icons.iconarchive.com/icons/aha-soft/security/16/key-icon.png',
alt: 'Key',
title:'Key',
click: function(){
alert($(this).attr('title'));
var vtext = jQuery('div.f-ba-mg iframe').contents().find('body').text().trim();
alert(vtext);
}
})
.css({
cursor: 'pointer',
border: '1px solid black',
backgroundColor: 'white'
})
.appendTo('#vdiv');
});
});
答案 0 :(得分:1)
嗯,你可以非常肯定脚本在ondomready-event之后执行,这是greasemonkey的正常执行时间(chrome提供了更早的执行时间,但这只是一个特殊选项)。所以没有必要在onload上运行它。所以你可以把它放在任何地方,只要你事先加载jQuery。
Erik的解决方案可以通过创建1个init函数(通常在.ready()运行),并使用addJquery(init-function);
顺便说一句,我的包含jQuery的方法是将它添加到脚本本身,因为否则必须为每个页面加载(这是一个减速),所以我在脚本中有一个缩小版本的jQuery和其他一些解决方案,见http://userscripts.org/scripts/review/52341 (顺便说一句,我作为维护者进来,代码远非完美)。
那里的解决方案:
1。)jQuery上有一些注释行,后面是jQuery 1.4.4的改编版和修改版(由于greasemonkey环境和普通文档范围之间存在细微差别)。
2。)就在这些行之上,我正在使用localStorage在Chrome上重新创建一些greasemonkey的功能。
3.。)greasemonkey中的unsafeWindow大约等于chrome中的窗口,但仅适用于浏览器本身提供的功能(其他人被chrome阻止,因为它们不安全)。没有使用很多,只有unsafeWindow.console.log()和一些不太重要的东西afaik。
但是对于你的情况,erik的方法也适用:
$(function(){
$(window).bind('load', function(){
...
});
});
到
addJquery(function() {
...
});