Страницы: 1
Нужно, чтобы переход на следующую страничку совершался автоматически. Вручную листать тяжко.
Пример: http://www.******.ru/*****/197164/, требуется автоматический переход на следующий или предыдущий номер. Желательно с отсеиванием переменной(на этой страничке) меньше выставляемого значения, и с задержкой по времени(для просмотра).
Запарился искать такую прогу.
Установил на Firefox - AutoPager и iOpus iMacros, а что и как там сделать - знаний не хватает.
P.S. Заранее, спасибо
Отредактировано cupol77 (02-07-2010 11:55:16)
Отсутствует
Был скрипт для Greesemonkey, позволяющий просматривать многостраничные разделы без перехода на следующую страницу. Работает примерно так - когда доходишь до кнца страницы, скрипт подгружает следующую, добавляя её к просмотренной. В итоге получается одна длинная страница, состоящая из всех страниц раздела. Правда есть недостаток - не везде работает, к примеру, на этом форуме не хочет.
Добавлено 02-07-2010 12:08:53
P.S. Называется скрипт AutoPagerize
Если не найдёте, то вот его "кишки"
// ==UserScript== // @name AutoPagerize // @namespace http://swdyh.yu.to/ // @description loading next page and inserting into current page. // @include http://* // @include https://* // @exclude https://mail.google.com/* // @exclude http://b.hatena.ne.jp/* // ==/UserScript== // // auther: swdyh http://d.hatena.ne.jp/swdyh/ // version: 0.0.41 2009-09-05T16:02:17+09:00 // // this script based on // GoogleAutoPager(http://la.ma.la/blog/diary_200506231749.htm) and // estseek autopager(http://la.ma.la/blog/diary_200601100209.htm). // thanks to ma.la. // // Released under the GPL license // http://www.gnu.org/copyleft/gpl.html // var URL = 'http://autopagerize.net/' var VERSION = '0.0.41' var DEBUG = false var AUTO_START = true var CACHE_EXPIRE = 24 * 60 * 60 * 1000 var BASE_REMAIN_HEIGHT = 400 var FORCE_TARGET_WINDOW = getPref('force_target_window', true) var USE_COUNTER = true var XHR_TIMEOUT = 30 * 1000 var SITEINFO_IMPORT_URLS = [ 'http://wedata.net/databases/AutoPagerize/items.json', ] var COLOR = { on: '#0f0', off: '#ccc', loading: '#0ff', terminated: '#00f', error: '#f0f' } var SITEINFO = [ /* sample { url: 'http://(.*).google.+/(search).+', nextLink: 'id("navbar")//td[last()]/a', pageElement: '//div[@id="res"]/div', exampleUrl: 'http://www.google.com/search?q=nsIObserver', }, */ /* template { url: '', nextLink: '', pageElement: '', exampleUrl: '', }, */ ] var MICROFORMAT = { url: '.*', nextLink: '//a[@rel="next"] | //link[@rel="next"]', insertBefore: '//*[contains(@class, "autopagerize_insert_before")]', pageElement: '//*[contains(@class, "autopagerize_page_element")]', } var AutoPager = function(info) { this.pageNum = 1 this.info = info this.state = AUTO_START ? 'enable' : 'disable' var self = this var url = this.getNextURL(info.nextLink, document, location.href) if ( !url ) { debug("getNextURL returns null.", info.nextLink) return } if (info.insertBefore) { this.insertPoint = getFirstElementByXPath(info.insertBefore) } if (!this.insertPoint) { var lastPageElement = getElementsByXPath(info.pageElement).pop() if (lastPageElement) { this.insertPoint = lastPageElement.nextSibling || lastPageElement.parentNode.appendChild(document.createTextNode(' ')) } } if (!this.insertPoint) { debug("insertPoint not found.", lastPageElement, info.pageElement) return } this.requestURL = url this.loadedURLs = {} this.loadedURLs[location.href] = true var toggle = function() {self.stateToggle()} this.toggle = toggle GM_registerMenuCommand('AutoPagerize - on/off', toggle) this.scroll= function() { self.onScroll() } window.addEventListener("scroll", this.scroll, false) if (isFirefoxExtension()) { var div = document.createElement("div") div.setAttribute('id', 'autopagerize_icon') div.style.display = 'none' document.body.appendChild(div) this.icon = div } else { this.initIcon() this.initHelp() this.icon.addEventListener("mouseover", function() { self.viewHelp() }, true) } var scrollHeight = getScrollHeight() var bottom = getElementPosition(this.insertPoint).top || this.getPageElementsBottom() || (Math.round(scrollHeight * 0.8)) this.remainHeight = scrollHeight - bottom + BASE_REMAIN_HEIGHT this.onScroll() var that = this document.addEventListener('AutoPagerizeToggleRequest', function() { that.toggle() }, false) document.addEventListener('AutoPagerizeUpdateIconRequest', function() { that.updateIcon() }, false) that.updateIcon() } AutoPager.prototype.getPageElementsBottom = function() { try { var elem = getElementsByXPath(this.info.pageElement).pop() return getElementBottom(elem) } catch(e) {} } AutoPager.prototype.initHelp = function() { var helpDiv = document.createElement('div') helpDiv.setAttribute('id', 'autopagerize_help') helpDiv.setAttribute('style', 'padding:5px;position:fixed;' + 'top:-200px;right:3px;font-size:10px;' + 'background:#fff;color:#000;border:1px solid #ccc;' + 'z-index:256;text-align:left;font-weight:normal;' + 'line-height:120%;font-family:verdana;') var toggleDiv = document.createElement('div') toggleDiv.setAttribute('style', 'margin:0 0 0 50px;') var a = document.createElement('a') a.setAttribute('class', 'autopagerize_link') a.innerHTML = 'on/off' a.href = 'javascript:void(0)' var self = this var toggle = function() { self.stateToggle() helpDiv.style.top = '-200px' } a.addEventListener('click', toggle, false) toggleDiv.appendChild(a) var s = '<div style="width:100px; float:left;">' for (var i in COLOR) { s += '<div style="float:left;width:1em;height:1em;' + 'margin:0 3px;background-color:' + COLOR[i] + ';' + '"></div><div style="margin:0 3px">' + i + '</div>' } s += '</div>' var colorDiv = document.createElement('div') colorDiv.innerHTML = s helpDiv.appendChild(colorDiv) helpDiv.appendChild(toggleDiv) var versionDiv = document.createElement('div') versionDiv.setAttribute('style', 'clear:both;') versionDiv.innerHTML = '<a href="' + URL + '">AutoPagerize</a> ver ' + VERSION helpDiv.appendChild(versionDiv) document.body.appendChild(helpDiv) var proc = function(e) { var c_style = document.defaultView.getComputedStyle(helpDiv, '') var s = ['top', 'left', 'height', 'width'].map(function(i) { return parseInt(c_style.getPropertyValue(i)) }) if (e.clientX < s[1] || e.clientX > (s[1] + s[3] + 11) || e.clientY < s[0] || e.clientY > (s[0] + s[2] + 11)) { helpDiv.style.top = '-200px' } } helpDiv.addEventListener('mouseout', proc, false) this.helpLayer = helpDiv GM_addStyle('#autopagerize_help a { color: #0f0; text-decoration: underline;}') } AutoPager.prototype.viewHelp = function() { this.helpLayer.style.top = '3px' } AutoPager.prototype.onScroll = function() { var scrollHeight = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight) var remain = scrollHeight - window.innerHeight - window.scrollY if (this.state == 'enable' && remain < this.remainHeight) { this.request() } } AutoPager.prototype.stateToggle = function() { if (this.state == 'enable') { this.disable() } else { this.enable() } } AutoPager.prototype.enable = function() { this.state = 'enable' this.updateIcon() } AutoPager.prototype.disable = function() { this.state = 'disable' this.updateIcon() } AutoPager.prototype.updateIcon = function(state) { var st = state || this.state var rename = {'enable': 'on', 'disable': 'off' } if (rename[st]) { st = rename[st] } var color = COLOR[st] if (color) { this.icon.style.background = color if (isFirefoxExtension()) { chlorine.statusBar.update(color, location.href) } } } AutoPager.prototype.request = function() { if (!this.requestURL || this.lastRequestURL == this.requestURL) { return } if (!this.canHandleCrossDomainRequest()) { return } this.lastRequestURL = this.requestURL var self = this var mime = 'text/html; charset=' + document.characterSet var headers = {} if (isSameDomain(this.requestURL)) { headers.Cookie = document.cookie } var opt = { method: 'get', url: this.requestURL, headers: headers, overrideMimeType: mime, onerror: this.error, onload: function(res) { self.requestLoad.apply(self, [res]) } } AutoPager.requestFilters.forEach(function(i) { i(opt) }, this) this.showLoading(true) GM_xmlhttpRequest(opt) } AutoPager.prototype.showLoading = function(sw) { if (sw) { this.updateIcon('loading') } else { this.updateIcon('enable') } } AutoPager.prototype.requestLoad = function(res) { if (!this.canHandleCrossDomainRequest()) { return } AutoPager.responseFilters.forEach(function(i) { i(res, this.requestURL) }, this) if (res.finalUrl) { this.requestURL = res.finalUrl } var t = res.responseText var htmlDoc = createHTMLDocumentByString(t) AutoPager.documentFilters.forEach(function(i) { i(htmlDoc, this.requestURL, this.info) }, this) try { var page = getElementsByXPath(this.info.pageElement, htmlDoc) var url = this.getNextURL(this.info.nextLink, htmlDoc, this.requestURL) } catch(e){ log(e) this.error() return } if (!page || page.length < 1 ) { debug('pageElement not found.' , this.info.pageElement) this.terminate() return } if (this.loadedURLs[this.requestURL]) { debug('page is already loaded.', this.requestURL, this.info.nextLink) this.terminate() return } this.loadedURLs[this.requestURL] = true page = this.addPage(htmlDoc, page) AutoPager.filters.forEach(function(i) { i(page) }) this.requestURL = url this.showLoading(false) this.onScroll() if (!url) { debug('nextLink not found.', this.info.nextLink, htmlDoc) this.terminate() } var ev = document.createEvent('Event') ev.initEvent('GM_AutoPagerizeNextPageLoaded', true, false) document.dispatchEvent(ev) } AutoPager.prototype.addPage = function(htmlDoc, page) { var HTML_NS = 'http://www.w3.org/1999/xhtml' var hr = document.createElementNS(HTML_NS, 'hr') var p = document.createElementNS(HTML_NS, 'p') hr.setAttribute('class', 'autopagerize_page_separator') p.setAttribute('class', 'autopagerize_page_info') var self = this if (page[0] && page[0].tagName == 'TR') { var insertParent = this.insertPoint.parentNode var colNodes = getElementsByXPath('child::tr[1]/child::*[self::td or self::th]', insertParent) var colums = 0 for (var i = 0, l = colNodes.length; i < l; i++) { var col = colNodes[i].getAttribute('colspan') colums += parseInt(col, 10) || 1 } var td = document.createElement('td') // td.appendChild(hr) td.appendChild(p) var tr = document.createElement('tr') td.setAttribute('colspan', colums) tr.appendChild(td) insertParent.insertBefore(tr, this.insertPoint) } else { this.insertPoint.parentNode.insertBefore(hr, this.insertPoint) this.insertPoint.parentNode.insertBefore(p, this.insertPoint) } p.innerHTML = 'page: <a class="autopagerize_link" href="' + this.requestURL.replace(/&/g, '&') + '">' + (++this.pageNum) + '</a>' return page.map(function(i) { var pe = document.importNode(i, true) self.insertPoint.parentNode.insertBefore(pe, self.insertPoint) var ev = document.createEvent('MutationEvent') ev.initMutationEvent('AutoPagerize_DOMNodeInserted', true, false, self.insertPoint.parentNode, null, self.requestURL, null, null) pe.dispatchEvent(ev) return pe }) } AutoPager.prototype.initIcon = function() { var div = document.createElement("div") div.setAttribute('id', 'autopagerize_icon') with (div.style) { fontSize = '12px' position = 'fixed' top = '3px' right = '3px' background = COLOR['on'] color = '#fff' width = '10px' height = '10px' zIndex = '255' if (this.state != 'enable') { background = COLOR['off'] } } document.body.appendChild(div) this.icon = div } AutoPager.prototype.getNextURL = function(xpath, doc, url) { var nextLink = getFirstElementByXPath(xpath, doc) if (nextLink) { var nextValue = nextLink.getAttribute('href') || nextLink.getAttribute('action') || nextLink.value if (nextValue.match(/^http(s)?:/)) { return nextValue } else { var base = getFirstElementByXPath('//base[@href]', doc) return resolvePath(nextValue, (base ? base.href : url)) } } } AutoPager.prototype.canHandleCrossDomainRequest = function() { if (!supportsFinalUrl()) { if (!isSameDomain(this.requestURL)) { this.error() return false } } return true } AutoPager.prototype.terminate = function() { this.updateIcon('terminated') window.removeEventListener('scroll', this.scroll, false) var self = this setTimeout(function() { self.updateIcon('disable') self.icon.parentNode.removeChild(self.icon) }, 1500) } AutoPager.prototype.error = function() { this.updateIcon('error') window.removeEventListener('scroll', this.scroll, false) } AutoPager.documentFilters = [] AutoPager.requestFilters = [] AutoPager.responseFilters = [] AutoPager.filters = [] function Counter() {} Counter.DATA_KEY = 'counter_data' Counter.get = function() { return eval(GM_getValue(Counter.DATA_KEY)) || {} } Counter.set = function(val) { return GM_setValue(Counter.DATA_KEY, uneval(val)) } Counter.up = function() { var date = new Date() var date_y = date.getFullYear() var date_m = date.getMonth() + 1 var date_d = date.getDate() var counter_data = Counter.get() counter_data[date_y] = counter_data[date_y] || {} counter_data[date_y][date_m] = counter_data[date_y][date_m] || {} counter_data[date_y][date_m][date_d] = (counter_data[date_y][date_m][date_d] || 0) + 1 Counter.set(counter_data) return counter_data[date_y][date_m][date_d] } Counter.reset = function() { return Counter.set({}) } Counter.total = function() { var total = 0 var counter_data = Counter.get() for (var year in counter_data) { for (var month in counter_data[year]) { for (var date in counter_data[year][month]) { total += counter_data[year][month][date] } } } return total } Counter.view = function() { var div = Counter.layer() var couter_data = Counter.get() var comp = function(a, b) { return b - a } Counter.each(couter_data,function(year, year_data) { Counter.each(year_data, function(month, month_data) { var img = document.createElement('img') img.src = Counter.chart(year, month, month_data) div.appendChild(img) }, comp) }, comp) window.scrollTo(0, 0) } Counter.layer = function() { var id = 'autopagerize_count_chart' var e = document.getElementById(id) if (e) { e.parentNode.removeChild(e) } var div = document.createElement('div') div.id = id div.style.position = 'absolute' div.style.top = '0px' div.style.left = '0px' div.style.width = '100%' div.style.border = '1px solid #ccc' div.style.backgroundColor = '#fff' div.style.zIndex = '100' document.body.appendChild(div) var h1 = document.createElement('h1') h1.appendChild(document.createTextNode('AutoPagerize Count Chart: ' + Counter.total())) div.appendChild(h1) return div } Counter.each = function(obj, func, comp) { var ks = [] for (var k in obj) { ks.push(k) } if (comp) { ks.sort(comp) } for (var i = 0; i < ks.length; i++) { func(ks[i], obj[ks[i]]) } } Counter.chart = function(year, month, month_data) { var max = 0 var total = 0 var x_label = [] var val = [] for (var i = 1; i <= 31; i++) { var v = month_data[i] || 0 x_label.push(i) val.push(v) max = Math.max(max, v) total += v } var range = Counter.ceil(max) var y_label = [] for (var i = 0; i <= 10; i++) { y_label.push(range / 10 * i) } var xl = function(num, list) { return num + ':|' + list.join('|') + '|' } var url = 'http://chart.apis.google.com/chart?' + 'cht=bvs&chs=500x250&chbh=10&chxt=x,y,x&chco=adff2f' + '&chd=t:' + val.join(',') + '&chxl=' + xl(0, x_label) + xl(1, y_label) + xl(2, [' total: ' + total]) + '&chds=0,' + (range * 1.1) + '&chtt=' + year + '/' + month return url } Counter.ceil = function(val) { var n = 1 var limit = 100 for (var i = 0; i < limit; i++) { if (n > val) { return n } n = n * 5 if (n > val) { return n } n = n * 2 } } if (USE_COUNTER) { GM_registerMenuCommand('AutoPagerize - count chart', Counter.view) AutoPager.documentFilters.push(function() { Counter.up() }) } var parseInfo = function(str) { var lines = str.split(/\r\n|\r|\n/) var re = /(^[^:]*?):(.*)$/ var strip = function(str) { return str.replace(/^\s*/, '').replace(/\s*$/, '') } var info = {} for (var i = 0; i < lines.length; i++) { if (lines[i].match(re)) { info[RegExp.$1] = strip(RegExp.$2) } } var isValid = function(info) { var infoProp = ['url', 'nextLink', 'pageElement'] for (var i = 0; i < infoProp.length; i++) { if (!info[infoProp[i]]) { return false } } return true } return isValid(info) ? info : null } var launchAutoPager = function(list) { if (list.length == 0) { return } for (var i = 0; i < list.length; i++) { try { if (ap) { return } else if (!location.href.match(list[i].url)) { } else if (!getFirstElementByXPath(list[i].nextLink)) { // FIXME microformats case detection. // limiting greater than 12 to filter microformats like SITEINFOs. if (list[i].url.length > 12 ) { debug("nextLink not found.", list[i].nextLink) } } else if (!getFirstElementByXPath(list[i].pageElement)) { if (list[i].url.length > 12 ) { debug("pageElement not found.", list[i].pageElement) } } else { ap = new AutoPager(list[i]) return } } catch(e) { log(e) continue } } } var clearCache = function() { GM_setValue('cacheInfo', '') } var getCache = function() { return eval(GM_getValue('cacheInfo')) || {} } var getCacheCallback = function(res, url) { if (res.status != 200) { return getCacheErrorCallback(url) } var info try { info = eval(res.responseText).map(function(i) { return i.data }) } catch(e) { info = [] var matched = false var hdoc = createHTMLDocumentByString(res.responseText) var textareas = getElementsByXPath( '//*[@class="autopagerize_data"]', hdoc) textareas.forEach(function(textarea) { var d = parseInfo(textarea.value) if (d) { info.push(d) if (!matched && location.href.match(d.url)) { matched = d } } }) } if (info.length > 0) { info = info.filter(function(i) { return ('url' in i) }) info.sort(function(a, b) { return (b.url.length - a.url.length) }) var r_keys = ['url', 'nextLink', 'insertBefore', 'pageElement'] info = info.map(function(i) { var item = {} r_keys.forEach(function(key) { if (i[key]) { item[key] = i[key] } }) return item }) cacheInfo[url] = { url: url, expire: new Date(new Date().getTime() + CACHE_EXPIRE), info: info } GM_setValue('cacheInfo', cacheInfo.toSource()) launchAutoPager(info) } else { getCacheErrorCallback(url) } } var getCacheErrorCallback = function(url) { var expire = new Date(new Date().getTime() + CACHE_EXPIRE) if (cacheInfo[url]) { cacheInfo[url].expire = expire launchAutoPager(cacheInfo[url].info) } else { cacheInfo[url] = { url: url, expire: expire, info: [] } } GM_setValue('cacheInfo', cacheInfo.toSource()) } var linkFilter = function(doc, url) { var base = getFirstElementByXPath('//base[@href]', doc) var baseUrl = base ? base.href : url var isSameBase = isSameBaseUrl(location.href, baseUrl) if (!FORCE_TARGET_WINDOW && isSameBase) { return } var anchors = getElementsByXPath('descendant-or-self::a[@href]', doc) anchors.forEach(function(i) { var attrHref = i.getAttribute('href') if (FORCE_TARGET_WINDOW && !attrHref.match(/^#|^javascript:/) && i.className.indexOf('autopagerize_link') < 0) { i.target = '_blank' } if (!isSameBase && !attrHref.match(/^#|^\w+:/)) { i.href = resolvePath(i.getAttribute('href'), baseUrl) } }) if (!isSameBase) { var images = getElementsByXPath('descendant-or-self::img', doc) images.forEach(function(i) { i.src = resolvePath(i.getAttribute('src'), baseUrl) }) } } AutoPager.documentFilters.push(linkFilter) fixResolvePath() if (typeof(window.AutoPagerize) == 'undefined') { window.AutoPagerize = {} window.AutoPagerize.addFilter = function(f) { AutoPager.filters.push(f) } window.AutoPagerize.addDocumentFilter = function(f) { AutoPager.documentFilters.push(f) } window.AutoPagerize.addResponseFilter = function(f) { AutoPager.responseFilters.push(f) } window.AutoPagerize.addRequestFilter = function(f) { AutoPager.requestFilters.push(f) } window.AutoPagerize.launchAutoPager = launchAutoPager var ev = document.createEvent('Event') ev.initEvent('GM_AutoPagerizeLoaded', true, false) document.dispatchEvent(ev) } GM_registerMenuCommand('AutoPagerize - clear cache', clearCache) var ap = null launchAutoPager(SITEINFO) var cacheInfo = getCache() var xhrStates = {} SITEINFO_IMPORT_URLS.forEach(function(i) { if (!cacheInfo[i] || cacheInfo[i].expire < new Date()) { var opt = { method: 'get', url: i, onload: function(res) { xhrStates[i] = 'loaded' getCacheCallback(res, i) }, onerror: function(res){ xhrStates[i] = 'error' getCacheErrorCallback(i) }, } xhrStates[i] = 'start' GM_xmlhttpRequest(opt) setTimeout(function() { if (xhrStates[i] == 'start') { getCacheErrorCallback(i) } }, XHR_TIMEOUT) } else { launchAutoPager(cacheInfo[i].info) } }) launchAutoPager([MICROFORMAT]) // new google search sucks! if (location.href.match('^http://[^.]+\.google\.(?:[^.]{2,3}\.)?[^./]{2,3}/.*(&fp=)')) { var to = location.href.replace(/&fp=.*/, '') // console.log([location.href, to]) location.href = to } return // utility functions. function createHTMLDocumentByString(str) { if (document.documentElement.nodeName != 'HTML') { return new DOMParser().parseFromString(str, 'application/xhtml+xml') } var html = strip_html_tag(str) var htmlDoc try { // We have to handle exceptions since Opera 9.6 throws // a NOT_SUPPORTED_ERR exception for |document.cloneNode(false)| // against the DOM 3 Core spec. htmlDoc = document.cloneNode(false) htmlDoc.appendChild(htmlDoc.importNode(document.documentElement, false)) } catch(e) { htmlDoc = document.implementation.createDocument(null, 'html', null) } var fragment = createDocumentFragmentByString(html) try { fragment = htmlDoc.adoptNode(fragment) } catch(e) { fragment = htmlDoc.importNode(fragment, true) } htmlDoc.documentElement.appendChild(fragment) return htmlDoc } function getElementsByXPath(xpath, node) { var nodesSnapshot = getXPathResult(xpath, node, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE) var data = [] for (var i = 0; i < nodesSnapshot.snapshotLength; i++) { data.push(nodesSnapshot.snapshotItem(i)) } return data } function getFirstElementByXPath(xpath, node) { var result = getXPathResult(xpath, node, XPathResult.FIRST_ORDERED_NODE_TYPE) return result.singleNodeValue } function getXPathResult(xpath, node, resultType) { var node = node || document var doc = node.ownerDocument || node var resolver = doc.createNSResolver(node.documentElement || node) // Use |node.lookupNamespaceURI('')| for Opera 9.5 var defaultNS = node.lookupNamespaceURI(null) if (defaultNS) { const defaultPrefix = '__default__' xpath = addDefaultPrefix(xpath, defaultPrefix) var defaultResolver = resolver resolver = function (prefix) { return (prefix == defaultPrefix) ? defaultNS : defaultResolver.lookupNamespaceURI(prefix) } } return doc.evaluate(xpath, node, resolver, resultType, null) } function addDefaultPrefix(xpath, prefix) { const tokenPattern = /([A-Za-z_\u00c0-\ufffd][\w\-.\u00b7-\ufffd]*|\*)\s*(::?|\()?|(".*?"|'.*?'|\d+(?:\.\d*)?|\.(?:\.|\d+)?|[\)\]])|(\/\/?|!=|[<>]=?|[\(\[|,=+-])|([@$])/g const TERM = 1, OPERATOR = 2, MODIFIER = 3 var tokenType = OPERATOR prefix += ':' function replacer(token, identifier, suffix, term, operator, modifier) { if (suffix) { tokenType = (suffix == ':' || (suffix == '::' && (identifier == 'attribute' || identifier == 'namespace'))) ? MODIFIER : OPERATOR } else if (identifier) { if (tokenType == OPERATOR && identifier != '*') { token = prefix + token } tokenType = (tokenType == TERM) ? OPERATOR : TERM } else { tokenType = term ? TERM : operator ? OPERATOR : MODIFIER } return token } return xpath.replace(tokenPattern, replacer) } function createDocumentFragmentByString(str) { var range = document.createRange() range.setStartAfter(document.body) return range.createContextualFragment(str) } function log(message) { if (typeof console == 'object') { console.log(message) } else { GM_log(message) } } function debug() { if ( typeof DEBUG != 'undefined' && DEBUG ) { console.log.apply(this, arguments) } } function getElementPosition(elem) { var offsetTrail = elem var offsetLeft = 0 var offsetTop = 0 while (offsetTrail) { offsetLeft += offsetTrail.offsetLeft offsetTop += offsetTrail.offsetTop offsetTrail = offsetTrail.offsetParent } offsetTop = offsetTop || null offsetLeft = offsetLeft || null return {left: offsetLeft, top: offsetTop} } function getElementBottom(elem) { var c_style = document.defaultView.getComputedStyle(elem, '') var height = 0 var prop = ['height', 'borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom', 'marginTop', 'marginBottom'] prop.forEach(function(i) { var h = parseInt(c_style[i]) if (typeof h == 'number') { height += h } }) var top = getElementPosition(elem).top return top ? (top + height) : null } function getScrollHeight() { return Math.max(document.documentElement.scrollHeight, document.body.scrollHeight) } function isSameDomain(url) { return location.host == url.split('/')[2] } function isSameBaseUrl(urlA, urlB) { return (urlA.replace(/[^/]+$/, '') == urlB.replace(/[^/]+$/, '')) } function supportsFinalUrl() { return (GM_getResourceURL) } function resolvePath(path, base) { var XHTML_NS = "http://www.w3.org/1999/xhtml" var XML_NS = "http://www.w3.org/XML/1998/namespace" var a = document.createElementNS(XHTML_NS, 'a') a.setAttributeNS(XML_NS, 'xml:base', base) a.href = path return a.href } function fixResolvePath() { if (resolvePath('', 'http://resolve.test/') == 'http://resolve.test/') { return } // A workaround for WebKit and Mozilla 1.9.2a1pre, // which don't support XML Base in HTML. // https://bugs.webkit.org/show_bug.cgi?id=17423 // https://bugzilla.mozilla.org/show_bug.cgi?id=505783 var XML_NS = 'http://www.w3.org/XML/1998/namespace' var baseElement = document.createElementNS(null, 'base') var pathElement = document.createElementNS(null, 'path') baseElement.appendChild(pathElement) resolvePath = function resolvePath_workaround(path, base) { baseElement.setAttributeNS(XML_NS, 'xml:base', base) pathElement.setAttributeNS(XML_NS, 'xml:base', path) return pathElement.baseURI } } function strip_html_tag(str) { var chunks = str.split(/(<html(?:[ \t\r\n][^>]*)?>)/) if (chunks.length >= 3) { chunks.splice(0, 2) } str = chunks.join('') chunks = str.split(/(<\/html[ \t\r\n]*>)/) if (chunks.length >= 3) { chunks.splice(chunks.length - 2) } return chunks.join('') } function getPref(key, defaultValue) { var value = GM_getValue(key) return (typeof value == 'undefined') ? defaultValue : value } function isFirefoxExtension() { return (typeof chlorine == 'object') }
В настройках скрипта в GM установить охватываемое пространство имён
Отредактировано =Agasfer= (02-07-2010 12:10:43)
Arch Linux & xmonad
Отсутствует
Ничего. Проверь, работает ли на нужном сайте.
Из известных сайтов могу назвать АМО - срипт нормально работает. Будет ли работать на нужном..... а фиг его знает!
Arch Linux & xmonad
Отсутствует
cupol77
кроме скриптов существуют и расширения с аналогичным функционалом
Отсутствует
cupol77 там когда прокрутите страницу до конца снизу подгружается следующая ...настройки кстати на русском языке
Был бы мануал другое дело.
http://translate.google.com/translate?u … UTF8&tl=ru
Добавлено 02-07-2010 14:09:34
... и между прочим при первом запуске сверху страницы появляется всплывашка с предложением включить автоматическое определение для страниц
Добавлено 02-07-2010 14:12:16
проще всего посмотреть как всё работает - открыть результат выдачи поиска Google
Отсутствует
Страницы: 1