尝试添加暂停/恢复实时评论的复选框。 (现在它的工作方式是当鼠标滚动到客户区域或推出时暂停/恢复)。我遵循Brock Adams here的指示,但它不起作用(下面的复选框没问题,只是实际的暂停/恢复功能完全无效。)
function paused() {
return false;
}
function pause_click() {
if (this.checked) {
$("div.echo-stream-body").bind("mouseout",paused);
$("div.echo-stream-body").mouseover();
}
else {
$("div.echo-stream-body").unbind("mouseout",paused);
$("div.echo-stream-body").mouseout();
}
}
function add_pause_checkbox() {
$(".echo_sort_down").after("<span style='position:relative; top:-3px; margin-left:540px;'><input type='checkbox' name='pause_gm' id='pause_gm' value='Pause' onClick='pause_click()' /><span style='position:relative; top:-2px;'>Pause</span></span>");
$("#pause_gm").click(pause_click);
}
$(document).ready(add_pause_checkbox);
答案 0 :(得分:1)
有几件事:
在这种情况下,您需要使用页面的jQuery副本。因此$
的所有实例都需要unsafeWindow.jQuery
。
在GM脚本触发后,不要关闭JS将加载的结构!例如,.echo_sort_down
通常不存在。
在这种情况下,请在#echostream1
之前插入。
避免使用内联样式。代码将更清晰,更容易摆弄。通过GM_addStyle()
使用CSS。
以下作品,下面讨论的例外......
// ==UserScript==
// @name _ESPN pause foo.
// @include http://scores.espn.go.com/nba/*
// ==/UserScript==
function paused (zEvent) {
return false;
}
function pause_click () {
if (this.checked) {
unsafeWindow.jQuery ("div.echo-stream-body").bind ("mouseout", paused);
unsafeWindow.jQuery ("div.echo-stream-body").mouseover ();
}
else {
unsafeWindow.jQuery ("div.echo-stream-body").unbind ("mouseout", paused);
unsafeWindow.jQuery ("div.echo-stream-body").mouseout ();
}
}
unsafeWindow.jQuery ("#echostream1").before (
"<span class='mySpan'><input type='checkbox' id='pause_gm'/><span>Pause</span></span>"
);
unsafeWindow.jQuery ("#pause_gm").click (pause_click);
GM_addStyle ( (<><![CDATA[
span.mySpan
{
position: relative;
top: -3px;
margin-left: 540px;
}
span.mySpan span
{
position: relative;
top: -2px;
}
]]></>).toString () );
请注意,绑定mouseout
无效。也就是说,该复选框将用于暂停对话,但如果用户然后将鼠标移过然后退出,则对话将恢复,复选框将不同步。
这很可能是因为我们无法保证我们的绑定函数在页面之前触发。
要探索的一些可能的解决方法:
找到页面的mouseout挂钩的功能,然后在单击复选框时取消绑定并重新绑定页面的mouseout。
在会话区域上方放置一个透明覆盖层,并根据需要使用它来拦截鼠标移出事件。
事件监听器绑定顺序无疑涉及其他SO问题。搜索其他人可能如何处理类似情况。
答案 1 :(得分:1)
Brock Adams -
谢谢!在这里回复你,我可以提供一些代码。
似乎没有使用unsafewindow是问题的症结所在,但我发现我必须使用echo-item-content而不是echo-stream-body。 (见下面的代码)。不知道为什么我不能引用echo_sort_down而不是echostream1,好像后者存在,那么前者也是如此。而且我只在$(document).ready上执行它(我注意到你删除了)。但是如果只使用echostream1.before就会出现格式化问题。如果我可以访问echo-stream-state(echostream1的子),那么我可以做echo-stream-state.before,但是访问它时遇到了问题。
但无论如何,下面的代码我现在已经开始工作,会考虑你用GM_addStyle做了什么。
再次感谢。
function paused (zEvent) {
return false;
}
function pause_click () {
if (this.checked) {
unsafeWindow.jQuery ("div.echo-item-content").bind ("mouseout", paused);
unsafeWindow.jQuery ("div.echo-item-content:first").mouseover ();
}
else {
unsafeWindow.jQuery ("div.echo-item-content").unbind ("mouseout", paused);
unsafeWindow.jQuery ("div.echo-item-content:first").mouseout ();
}
}
function add_pause_checkbox() {
unsafeWindow.jQuery (".echo_sort_down").after("<span style='position:relative; top:-3px; margin-left:500px;'><input type='checkbox' name='pause_gm' id='pause_gm' value='Pause' onClick='pause_click()' /><span style='position:relative; top:-2px;'>Pause</span></span>");
unsafeWindow.jQuery ("#pause_gm").click(pause_click);
}
unsafeWindow.jQuery (document).ready(add_pause_checkbox);