【发布时间】:2016-06-09 21:07:08
【问题描述】:
我有一个用户脚本(用于 Chrome),我用它来为我格式化 duolingo 的练习页面。它只是应用了一行 css
jQ(document).ready(function(){
jQ('#start-button').css({"float": "left", "margin-right": "10em"});
});
当我第一次访问该页面时,这工作得很好。但是他们使用 Ajax 来避免页面重新加载。并且 url 确实发生了变化,所以如果我检测到这一点,我可以刷新 css 更改并且不会丢失此站点导航模式的格式。
有人碰巧知道检测它的好方法吗?
编辑:实现几个最初指出的流行解决方案的完整用户脚本(这是行不通的):
// ==UserScript==
// @name duolingo
// @namespace http://your.homepage/
// @version 0.1
// @description reformat /skills to not start timed practice by default
// @author You
// @include /^https?\:\/\/www\.duolingo\.com\/(skill|practice)?\/?.*/
// @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js
// @grant none
// ==/UserScript==
window.jQ=jQuery.noConflict(true);
jQ(document).ready(function(){
style_duolingo();
});
jQ(window).bind('hashchange', function() {
style_duolingo();
});
jQ(document).ajaxComplete(function() {
style_duolingo();
});
function style_duolingo() {
jQ('#start-button').css({"float": "left", "margin-right": "10em"});
console.log("Tampermonkey script: wrote css change");
}
编辑#2:
赏金奖励
请提供一个不加载外部库的工作解决方案(我想知道我缺少什么,而不是将其保存在黑匣子中),并使用事件解决问题(没有基于间隔的解决方案)。如果事件(奇怪)无法使用,请提供更正解决方案以及事件未触发的原因。
【问题讨论】:
-
您在 AJAX 调用中传递的类型参数是什么?
-
也许这在目标场景中根本不起作用,但是是否可以插入带有 !important 注释
$('head').append("<style type='text/css'> #start-button{ float: left !important; margin-right: 10em; !important}</style>");的 css 行? -
是的,我经常这样做。通常,这是一个错误,你可以在你的 CSS 中更具体,如果做不到这一点,你可以在使用 jQuery 找到有问题的选择器后删除它。但是,它可以由站点以编程方式注入,并且不必只发生一次 - 所以有时它在用户脚本中确实很重要。