15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ==UserScript== 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// @name Userscript @run-at example. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// @version 1.0.1 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// @namespace runat 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// @description This script demonstrates @runat by listing which resources 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the current page has loaded. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// @include * 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// @run-at document-start 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ==/UserScript== 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (c) 2011 The Chromium Authors. All rights reserved. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var urls = {}; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var count = 0; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called whenever the page loads a subresource. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Logs all loaded URLs in the urls var. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)document.addEventListener('beforeload', function(evt) { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!urls[evt.url]) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls[evt.url] = 0; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) count++; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls[evt.url]++; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}, true); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called when the window is finished loading. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Loops through the urls var and prints its contents to the page DOM. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)window.addEventListener('load', function() { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (count == 0) { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create and style inserted DOM elements. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var urls_dom = document.createElement('ul'); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls_dom.style.cssText = [ 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'margin: 4px 0 !important;', 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'padding: 0 !important;', 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'width: 98%;', 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'word-wrap: break-word;', 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'max-height: 200px;', 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'overflow: auto;' 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ].join(' '); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var wrap_dom = document.createElement('div'); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wrap_dom.style.cssText = [ 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'background-color: #ff7357;', 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'background-image: -webkit-repeating-linear-gradient(' + 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '-45deg, transparent, transparent 35px,' + 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'rgba(0,0,0,.1) 35px, rgba(0,0,0,.1) 70px);', 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'color: #000;', 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'padding: 10px;', 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'font: 14px Arial;' 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ].join(' '); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var title_dom = document.createElement('strong'); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_dom.textContent = (count > 1) ? 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'This page has loaded the following resources:' : 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'This page loaded the following resource:'; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wrap_dom.appendChild(title_dom); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wrap_dom.appendChild(urls_dom); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Render each url as a list item containing a link. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var url in urls) { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var url_dom = document.createElement('li'); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var link_dom = document.createElement('a'); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var times_dom = document.createElement('span'); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_dom.style.cssText = [ 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'list-style-type: disc;', 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'margin: 0 0 0 30px !important;', 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'padding: 2px !important' 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ].join(' '); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) link_dom.setAttribute('href', url); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) link_dom.setAttribute('target', '_blank'); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) link_dom.textContent = url; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) link_dom.style.cssText = [ 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'color: #000 !important;' 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ].join(' '); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) times_dom.textContent = (urls[url] > 1) ? 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' (' + urls[url] + ' times)' : 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' (once)'; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_dom.appendChild(link_dom); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_dom.appendChild(times_dom); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls_dom.appendChild(url_dom); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Insert the created DOM into the page. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.body.style.position = 'relative'; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.body.parentElement.insertBefore(wrap_dom, document.body); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}, true); 96