2010-05-26 1 views
2

Мне нужна небольшая помощь при получении скрипта, который будет принимать параметры из исходной ссылки и переписать их в новую ссылку. Я думаю, это должно быть довольно легко, но я все еще не знаю, когда дело доходит до этого.Greasemonkey: переписать все ссылки на основе param

Это оригинальный HTML-код для 1 ссылки. (Следует заменить globaly на странице. Image1.jpg, image2.jpg и т.д.)

<div align="center"><a href="/index.php?Submit=ok&seson=b1e4&connect=127.0.0.1&id=13033&name=on"><img src="/preview/image1.jpg" width="128" height="128" border="0" style="border: 0px black solid;" /></a></div> 

Это должно быть сделано глобальным по всем ссылкам, которые содержат ImagePath «/ Просмотр /»

Благодаря Brock Adams Я как бы понимаю, как получить значения param с помощью этого кода, но я до сих пор не понимаю, как переписать все ссылки на странице.

var searchableStr = document.URL + '&'; 
var value1 = searchableStr.match (/[\?\&]id=([^\&\#]+)[\&\#]/i) [1]; 
var value2 = searchableStr.match (/[\?\&]connect=([^\&\#]+)[\&\#]/i) [1]; 

, а затем переписать ссылки с «NewLink»

var domain = searchableStr.match (/\/\/([w\.]*[^\/]+)/i) [1]; 
var newlink = '//' + domain + '/' + value1 + '/data/' + value2 + '.ext'; 

Если кто-то может быть так хорошо, чтобы помочь мне настроить пример Greasemonkey скрипт я был бы очень благодарен за это.

ответ

2

ОК, Это довольно распространенная задача, и я не вижу никаких предыдущих вопросов, связанных с переполнением стека, как это, по крайней мере, в течение 2-минутного поиска.

Итак, вот скрипт, который должен делать то, что вы хотите, на основе информации, предоставленной ...

// ==UserScript== 
// @name   Site_X, image relinker. 
// @namespace  StackOverflow 
// @description  Rewrites the preview links to ??? 
// @include   http://Site_X.com/* 
// @include   http://www.Site_X.com/* 
// @include   https://Site_X.com/* 
// @include   https://www.Site_X.com/* 
// ==/UserScript== 
function LocalMain() { 
    /*--- Get all the images that have /preview/ in their path. 
    */ 
    var aPreviewImages = document.evaluate (
          "//img[contains (@src, '/preview/')]", 
          document, 
          null, 
          XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, 
          null 
         ); 
    var iNumImages  = aPreviewImages.snapshotLength; 
    GM_log (iNumImages + ' preview images found.'); 

    /*--- Rewrite the parent links to our new specifications. 
     Note, all the target links are of the form: 
      <a href="/index.php?Submit=ok&seson=b1e4&connect=127.0.0.1&id=13033&name=on"> 
      <img src="/preview/image1.jpg" width="128" height="128" border="0" style="border: 0px black solid;" /> 
      </a> 

     The desired rewrite changes the link to this form: 
      <a href="{current page's domain}/{id-value}/data/{connect-value}.ext"> 
    */ 
    for (var iLinkIdx=0; iLinkIdx < iNumImages; iLinkIdx++) { 
     var zThisImage  = aPreviewImages.snapshotItem (iLinkIdx); 
     var zParentLink  = zThisImage.parentNode; 

     //--- Get the key href parameters. 
     var sIdValue  = sGetUrlParamValue (zParentLink, 'id'); 
     if (!sIdValue)  continue; //-- Oopsie, this link was a malformed. 

     var sConnectValue = sGetUrlParamValue (zParentLink, 'connect'); 
     if (!sConnectValue) continue; 

     //--- Get the current page's domain. (Or just use a relative link.) 
     var sPageDomain  = document.URL.match (/\/\/([w\.]*[^\/]+)/i) [1]; 

     //--- Generate the desired link value. 
     var sDesiredLink = 'http://' + sPageDomain + '/' + sIdValue + '/data/' + sConnectValue + '.ext'; 

     //--- Rewrite the target link. 
     zParentLink.href = sDesiredLink; 
    } 
} 

function sGetUrlParamValue (zTargLink, sParamName) { 
    var zRegEx = eval ('/[\?\&]' + sParamName + '=([^\&\#]+)[\&\#]/i'); 

    var aMatch = (zTargLink.href + '&').match (zRegEx); 
    if (aMatch) 
     return decodeURI (aMatch[1]); 
    else 
     return null; 
} 

window.addEventListener ("load", LocalMain, false); 
+0

снова Спасибо вам большое Брок Адамс. Он отлично подходит для меня. И специально для того, чтобы найти время, чтобы добавить дополнительную информацию. :) – Bulfen

 Смежные вопросы

  • Нет связанных вопросов^_^