hzhbest
千年狐狸
千年狐狸
  • UID22640
  • 注册日期2008-01-15
  • 最后登录2017-04-06
  • 发帖数1763
  • 经验476枚
  • 威望3点
  • 贡献值414点
  • 好评度89点
  • 社区居民
  • 忠实会员
135楼#
发布于:2014-05-29 17:33
好久了更新这脚本了……
不过好像也没什么需要更新的(之前有个大计划,但需求实在薄弱,都提不起劲做,忽略……)

现在遇到一个问题,就是自动翻页的时候不能自动更新高亮。
以前用Autopagerize,脚本提供一个事件可供跟踪,于是Ewh就通过这个事件实现了自动更新高亮。
我现在用的是这个:
Super preloader++ for Greasemonkey 【恶意脚本!!见楼下】
http://userscripts.org:8080/scripts/show/464811

这脚本没提供类似的事件,我不知道应该用什么样的方式去判断该自动更新高亮的时机了。
hzzhaiqi
火狐狸
火狐狸
  • UID30112
  • 注册日期2009-08-18
  • 最后登录2015-09-15
  • 发帖数279
  • 经验180枚
  • 威望1点
  • 贡献值44点
  • 好评度28点
136楼#
发布于:2014-05-29 18:51
hzhbest:好久了更新这脚本了……
不过好像也没什么需要更新的(之前有个大计划,但需求实在薄弱,都提不起劲做,忽略……)

现在遇到一个问题,就是自动翻页的时候不能自动更新高亮。
以前用Autopagerize,脚本提供一个事件可供跟踪,于是Ewh就通...
回到原帖
Super preloader++ 这脚本能用?恶意脚本,抄袭我改的 Super_preloaderPlus_one。Super_preloaderPlus_one 插入下一页后增加了 “Super_preloaderPageLoaded” 事件。
hzhbest
千年狐狸
千年狐狸
  • UID22640
  • 注册日期2008-01-15
  • 最后登录2017-04-06
  • 发帖数1763
  • 经验476枚
  • 威望3点
  • 贡献值414点
  • 好评度89点
  • 社区居民
  • 忠实会员
137楼#
发布于:2014-05-30 09:32
hzzhaiqi:Super preloader++ 这脚本能用?恶意脚本,抄袭我改的 Super_preloaderPlus_one。Super_preloaderPlus_one 插入下一页后增加了 “Super_preloaderPageLoaded”...回到原帖
哦哦,真的不好意思……因为在USO搜“preloader”居然没结果,用Google站内搜搜到比较新的就那个了,用“Super_preloaderPlus_one”搜才搜到……
我用你的脚本试下先,谢了!
hzhbest
千年狐狸
千年狐狸
  • UID22640
  • 注册日期2008-01-15
  • 最后登录2017-04-06
  • 发帖数1763
  • 经验476枚
  • 威望3点
  • 贡献值414点
  • 好评度89点
  • 社区居民
  • 忠实会员
138楼#
发布于:2014-06-24 14:48
最近百度好像改成了AJAX方式载入了,也就是更改关键词之后搜索页面是不重载就刷新了结果的,这样的情况下Ewh无法重新载入从而无法高亮。
请教各位大神怎样才可以截获搜索结果刷新的事件呢?
aaaa007cn
千年狐狸
千年狐狸
  • UID23968
  • 注册日期2008-05-03
  • 最后登录2022-03-07
  • 发帖数1924
  • 经验1138枚
  • 威望1点
  • 贡献值232点
  • 好评度164点
139楼#
发布于:2014-06-24 19:33
hzhbest:最近百度好像改成了AJAX方式载入了,也就是更改关键词之后搜索页面是不重载就刷新了结果的,这样的情况下Ewh无法重新载入从而无法高亮。
请教各位大神怎样才可以截获搜索结果刷新的事件呢?
回到原帖
https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Mutation_events
试试监听 DOMNodeInserted、DOMNodeInsertedIntoDocument 事件?
hzhbest
千年狐狸
千年狐狸
  • UID22640
  • 注册日期2008-01-15
  • 最后登录2017-04-06
  • 发帖数1763
  • 经验476枚
  • 威望3点
  • 贡献值414点
  • 好评度89点
  • 社区居民
  • 忠实会员
140楼#
发布于:2014-06-25 10:15
aaaa007cn:https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Mutation_events
试试监听 DOMNodeInserted、DOMNodeInsertedIntoDocume...
回到原帖
DOMNodeInserted 监听成功,但是依然没法开始高亮过程,最接近的一次是看到高亮关键词发生变化后页面内容就被更新然后高亮都没了Firefox却死机了……
页面内容更新会导致多次DOMNodeInserted事件对吧?所以会使刷新关键词的尝试重复进行……
手动更新高亮似乎也无效(应该是脚本自身的不足……)
难道应该将事件绑定在“搜索”按钮上?
aaaa007cn
千年狐狸
千年狐狸
  • UID23968
  • 注册日期2008-05-03
  • 最后登录2022-03-07
  • 发帖数1924
  • 经验1138枚
  • 威望1点
  • 贡献值232点
  • 好评度164点
141楼#
发布于:2014-06-25 16:41
hzhbest:DOMNodeInserted 监听成功,但是依然没法开始高亮过程,最接近的一次是看到高亮关键词发生变化后页面内容就被更新然后高亮都没了Firefox却死机了……
页面内容更新会导致多次DOMNodeInserted事件对吧?所以会使刷新关...
回到原帖
在捕获 DOMNodeInserted 事件时直接做关键词高亮会再次触发一个 DOMNodeInserted 事件
然后可能就死循环了?

在捕获到 DOMNodeInserted 之后
先 removeEventListener
然后 setTimeout 延迟执行高亮
之后再重新 addEventListener?

或者捕获 DOMNodeInserted 之后
延迟触发一个自定义事件
EWH 监听那个事件来高亮关键字?
hzhbest
千年狐狸
千年狐狸
  • UID22640
  • 注册日期2008-01-15
  • 最后登录2017-04-06
  • 发帖数1763
  • 经验476枚
  • 威望3点
  • 贡献值414点
  • 好评度89点
  • 社区居民
  • 忠实会员
142楼#
发布于:2014-06-25 16:47
aaaa007cn:在捕获 DOMNodeInserted 事件时直接做关键词高亮会再次触发一个 DOMNodeInserted 事件
然后可能就死循环了?

在捕获到 DOMNodeInserted 之后
先 removeEventListener
然后 s...
回到原帖
内容刷新后所有DOM节点都消失但事件和按键绑定都还在……
我还在梳理在这种情况下该重新初始化哪些过程……所以虽然已经想到了先remove再重新add但还是比较麻烦。

P.S. 这种情况下各种自动翻页脚本都失效了
hzhbest
千年狐狸
千年狐狸
  • UID22640
  • 注册日期2008-01-15
  • 最后登录2017-04-06
  • 发帖数1763
  • 经验476枚
  • 威望3点
  • 贡献值414点
  • 好评度89点
  • 社区居民
  • 忠实会员
143楼#
发布于:2014-06-30 10:18
我觉得,既然连翻页脚本都受干扰,我干脆让其强制刷新好了
// ==UserScript==
// @name        百度强制刷新
// @namespace   s
// @include     http://www.baidu.com/s*
// @version     1
// @grant       none
// ==/UserScript==
 
(function() {
 
var oldurl = window.location.href;
var button = document.getElementById('su');
var inputs = document.getElementById('kw');
button.addEventListener('click', go, false);
inputs.addEventListener('submit', go, false);
 
function go() { console.log(window.location.href);
    setTimeout(
    function(){
        if (window.location.href != oldurl) window.location.reload();
    }, 1000);
}
 
 
})();
hzzhaiqi
火狐狸
火狐狸
  • UID30112
  • 注册日期2009-08-18
  • 最后登录2015-09-15
  • 发帖数279
  • 经验180枚
  • 威望1点
  • 贡献值44点
  • 好评度28点
144楼#
发布于:2014-06-30 11:41
hzhbest:我觉得,既然连翻页脚本都受干扰,我干脆让其强制刷新好了
// ==UserScript==
// @name        百度强制刷新
// @namespace   s
// @include     http://www.ba...
回到原帖
。。。。。。 怎么搞得这么复杂。

最简单的方式,设置 cookie 让百度把搜索链接改成 s?wd=。我是研究广告屏蔽大师规则时发现的, https://github.com/ywzhaiqi/userscript/blob/master/.test/RedirectBaidu.user.js。 我的 Super_preloaderPlus_one 已经加入这个设置。
document.cookie = "ISSW=1";

像百度、Google 这种不刷新页面载入搜索结果(百度链接是 #wd=),监听 hashchange 事件可得知它什么时候变化。我写的 https://github.com/ywzhaiqi/userscript/tree/master/BaiduSearchNoJump 就尝试了各种方法,最后选定监视  #wrapper_wrapper 的方式。
hzhbest
千年狐狸
千年狐狸
  • UID22640
  • 注册日期2008-01-15
  • 最后登录2017-04-06
  • 发帖数1763
  • 经验476枚
  • 威望3点
  • 贡献值414点
  • 好评度89点
  • 社区居民
  • 忠实会员
145楼#
发布于:2014-06-30 15:10
hzzhaiqi:。。。。。。 怎么搞得这么复杂。

最简单的方式,设置 cookie 让百度把搜索链接改成 s?wd=。我是研究广告屏蔽大师规则时发现的, https://github.com/ywzhaiqi/userscript/blob/mast...
回到原帖
如果是用“#wd=”这种形式,我捕捉hashchange就能搞掂啦,但事实是其URL的确是“s?wd=”却是不刷新页面仅刷新内容的方式,hashchange试过无效。不过从你的脚本看强制cookie的方式则可以应对这点。
hzzhaiqi
火狐狸
火狐狸
  • UID30112
  • 注册日期2009-08-18
  • 最后登录2015-09-15
  • 发帖数279
  • 经验180枚
  • 威望1点
  • 贡献值44点
  • 好评度28点
146楼#
发布于:2014-06-30 22:24
hzhbest:如果是用“#wd=”这种形式,我捕捉hashchange就能搞掂啦,但事实是其URL的确是“s?wd=”却是不刷新页面仅刷新内容的方式,hashchange试过无效。不过从你的脚本看强制cookie的方式则可以应对这点。回到原帖
哪个 URL 是“s?wd=”却是不刷新页面仅刷新内容的方式?具体给出来我试试
hzhbest
千年狐狸
千年狐狸
  • UID22640
  • 注册日期2008-01-15
  • 最后登录2017-04-06
  • 发帖数1763
  • 经验476枚
  • 威望3点
  • 贡献值414点
  • 好评度89点
  • 社区居民
  • 忠实会员
147楼#
发布于:2014-07-01 09:34
hzzhaiqi:哪个 URL 是“s?wd=”却是不刷新页面仅刷新内容的方式?具体给出来我试试回到原帖
从【www.baidu.com】进去搜索的就是。
我在装了新版 Super_preloaderPlus_one 之后百度搜索页面的确是页面刷新,就是你上面说设置cookie的效果;我禁用 Super_preloaderPlus_one 并手动将 Baidu.com 下 ISSW 项cookie删除后,再在百度搜索(甚至原有页面不刷新的情况下)就变回仅刷新内容了。
hzzhaiqi
火狐狸
火狐狸
  • UID30112
  • 注册日期2009-08-18
  • 最后登录2015-09-15
  • 发帖数279
  • 经验180枚
  • 威望1点
  • 贡献值44点
  • 好评度28点
148楼#
发布于:2014-07-01 10:02
hzhbest:从【www.baidu.com】进去搜索的就是。
我在装了新版 Super_preloaderPlus_one 之后百度搜索页面的确是页面刷新,就是你上面说设置cookie的效果;我禁用 Super_preloaderPlus_one 并手...
回到原帖
刚测试了下,果然是的。现在连“s?wd=”都是不刷新页面仅刷新内容,我 6月 17 日测试的时候还不是。百度应该是使用 history.pushState 来实现的,可以监控 window.onpopstate  事件,https://developer.mozilla.org/zh-CN/docs/Web/API/Window.onpopstate

节选百度部分代码
if ((!at && !K) || Cookie.get('ISSW') == 1) {
  !function () {
    function a0() {
      aR.hash && aR.hash.match(/[^a-zA-Z0-9](wd|word)=/) && aR.replace('http://www.baidu.com/s?' + aR.href.match(/#(.*)$/) [1])
    }
    aR.hash.match(/[^a-zA-Z0-9](wd|word)=/) ? (aR.replace('http://www.baidu.com/s?' + aR.href.match(/#(.*)$/) [1]), (function () {
      throw new Error('redirect to sync')
    }) ())  : (document.getElementById('wrapper') .style.display = 'block', 'onhashchange' in window ? window.onhashchange = a0 : setInterval(a0, 200))
  }();
  U = ar = true
}
function aD(a0) {
  window.history.pushState(a0, '', a0.buildSyncSearchUrl());
  ao(true)
}
window.pushStateUrl = function (a0) {
  window.history.pushState(null, '', a0);
  ao(true)
};
if ((K || at) && Cookie.get('ISSW') != 1) {
  $(document) .delegate('a', 'mousedown', (function () {
    var a0 = 'http://' + aR.host;
    return function (a4) {
      var a2 = $(this);
      if (a2.attr('target') && a2.attr('target') != '_self') {
        return
      }
      var a1 = a2.attr('href');
      if (a1 && a1.indexOf(a0) == 0) {
        a1 = a1.substring(a0.length)
      }
      if (a1) {
        matched = a1.match(/^\/*s\?(.*)/)
      }
      if (a1 && matched) {
        var a5 = aW(matched[0]);
        if (!a5.pn) {
          a5.pn = ''
        }
        if (p(['baidurt',
        'baiduwb',
        'baidufir',
        'SE_baiduxueshu_c1gjeupa'], a5.tn) < 0) {
          if (at) {
            var a3 = ac.buildSyncSearchUrl(a5);
            this.onclick = (function (a6) {
              return function (a7) {
                pushStateUrl(a6);
                return false
              }
            }) (a3)
          } else {
            a2.attr('href', ac.buildSearchUrl(a5)) .attr('target', '_self')
          }
          af(a4)
        }
        return
      }
    }
  }) ())
}
hzhbest
千年狐狸
千年狐狸
  • UID22640
  • 注册日期2008-01-15
  • 最后登录2017-04-06
  • 发帖数1763
  • 经验476枚
  • 威望3点
  • 贡献值414点
  • 好评度89点
  • 社区居民
  • 忠实会员
149楼#
发布于:2014-07-01 10:32
查了一下,history.pushState会产生popstate事件【http://www.welefen.com/use-ajax-and-pushstate.html】,但是试了下无法监听到这事件……
游客

返回顶部