我写了一个简单的Greasemonkey script,用于在天桥弹出窗口中放大缩略图。它使用了很多jQuery。它适用于Firefox。但不在Chrome上,因为它不支持@require。
我遇到了solution这个问题。但是,即使我将它与get-around代码集成在一起,该脚本也无法在Chrome上运行。我只是将所有脚本代码放在解决方案代码的主函数中。
是不是错了?如果有人能指出问题出在哪里,以及我能做些什么来做到正确,那将非常感激。
function addJQuery(callback) {
var script = document.createElement("script");
script.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js");
script.addEventListener('load', function() {
var script = document.createElement("script");
script.textContent = "(" + callback.toString() + ")();";
document.body.appendChild(script);
}, false);
document.body.appendChild(script);
}
function main()
{
$("body").append ('<div id="idLargePicturePopupWindow"><img></div>');
$('#idLargePicturePopupWindow').bind
(
"mouseenter mouseleave",
{bInPopup: true},
myImageHover
);
$('#profPhotos .profPhotoLink > img').bind
(
"mouseenter mouseleave",
{bInPopup: false},
myImageHover
);
function myImageHover (zEvent)
{
if (zEvent.type == 'mouseenter')
{
if ( ! zEvent.data.bInPopup)
{
var imgurl = this.src.toString();
var bigimg = imgurl.replace(/\/thumbs\/[0-9x]+\//i, "/photos/");
$("#idLargePicturePopupWindow img").attr ('src', bigimg);
}
$("#idLargePicturePopupWindow").show();
}
else
{
$("#idLargePicturePopupWindow").hide();
}
}
GM_addStyle ( (<><![CDATA[
#idLargePicturePopupWindow
{
position: absolute;
background: white;
border: none;
margin: 1ex;
opacity: 1.0;
z-index: 1222;
min-height: 100px;
min-width: 200px;
padding: 0;
display: none;
top: 2em;
left: 50em;
}
#idLargePicturePopupWindow img
{
margin: 0;
margin-bottom: -4px;
padding: 0;
}
]]></>).toString () );
}
addJQuery(main);
答案 0 :(得分:2)
两个主要问题和1个可能的问题:
1)不要将GM_addStyle()
包裹在main()
函数中。 GM_addStyle()
仅适用于脚本范围,它无法注入目标页面(这是main()
和addJQuery()
业务所做的事情。
2)当前代码使用E4X制作多行字符串以发送给GM_addStyle()
,但Chrome不支持E4X。
唉,the multiline string hack that Chrome does support (for now)在Firefox中不起作用。
如果您希望同时支持两种浏览器,那么使用GM_addStyle()
编写真实样式会稍微困难一些。使用多行转义字符(\
),如下所示:
GM_addStyle ( " \
#idLargePicturePopupWindow { \
position: absolute; \
background: white; \
border: none; \
margin: 1ex; \
opacity: 1.0; \
z-index: 1222; \
min-height: 100px; \
min-width: 200px; \
padding: 0; \
display: none; \
top: 2em; \
left: 50em; \
} \
#idLargePicturePopupWindow img { \
margin: 0; \
margin-bottom: -4px; \
padding: 0; \
} \
" );
¿3?)addJQuery()
的特定版本可能并不总是有效(竞争条件)。如果没有,请告诉我。