MozTW 討論區
https://forum.moztw.org/

簡單的greasemonkey script編寫問題
https://forum.moztw.org/viewtopic.php?f=11&t=27445
1 頁 (共 1 頁)

發表人:  ovo [ 2009-07-18, 12:19 ]
文章主題 :  簡單的greasemonkey script編寫問題

如何將圖片連結前加入proxy。

例如:

<img src="http://www123.pic.com/1.jpg>
<img src="http://www99.pic.com/2.jpg>

變成:

<img src="http://www.proxy.com/proxy.php?u=http://www123.pic.com/1.jpg>
<img src="http://www.proxy.com/proxy.php?u=http://www99.pic.com/2.jpg>

www後的那些數字是隨意的(1到3個位),不是必然的123或99,即是:[0-9]{1,3}。

煩請幫忙,謝謝!:)

發表人:  shyangs [ 2009-07-18, 19:13 ]
文章主題 : 

我想你應該會用吧?直接上原始碼,不存成.user.js上傳了。

代碼:
// ==UserScript==
// @author         Shyangs
// @name           圖片連結前加入proxy
// @description    圖片連結前加入http://www.proxy.com/proxy.php?u=
// @namespace      http://wiki.moztw.org/index.php/User:Shyangs
// @version        0.1
// @include        http://*.pic.com/*
// ==/UserScript==
//套用的網站請修改 @include
(function() {
var ImgsNum=document.images.length;//圖片計數
//圖片連結前加入http://www.proxy.com/proxy.php?u=
for(var i=0;i<ImgsNum;i++)
{
    document.images[i].src="http://www.proxy.com/proxy.php?u="+document.images[i].src;
}
})();

發表人:  ovo [ 2009-07-18, 23:23 ]
文章主題 : 

先謝謝你的回覆,但不好意思,我說得不清楚,可能使你誤會了。

我希望的是:先把www###.pic.com找出來,然後才加上proxy,不是把所的img tag的src都加上去(因為很多時只有一部份的圖片是這樣的);

另外有些時候,它不一定是圖片,有可能只是普通的連結,或者只是文字,那又該如何處理呢?

最後,順帶一問:那些online proxy,不一定"http://www.proxy.com/proxy.php?u=http://www123.pic.com/1.jpg"這形式,
也有可能是"http://www.proxy.com/http/www123.pic.com/1.jpg"這樣子的,所以可以的話,麻煩兩個版本的script也給我,行嗎?謝謝!

發表人:  shyangs [ 2009-07-19, 13:26 ]
文章主題 : 

版本一 - 圖片
代碼:
(function() {
var pStr="http://www.proxy.com/proxy.php?u=";
//建立正則,匹配http://www『1~3位數字』.pic.com/『至少一個英、數、_字元』.jpg
var regex=/http:\/\/www[0-9]{1,3}\.pic\.com\/\w+\.jpg/;
var a=document.images;
var n=a.length;//圖片計數
for(var i=0;i<n;i++)
{
   //如果圖片連結匹配,圖片連結前加入pStr
   if(regex.test(a[i].src))
   {
       a[i].src=pStr+a[i].src;
    }
}
})();



版本一 - 連結
代碼:
(function() {
var pStr="http://www.proxy.com/proxy.php?u=";
//建立正則,匹配http://www『1~3位數字』.pic.com/『至少一個英、數、_字元』.jpg
var regex=/http:\/\/www[0-9]{1,3}\.pic\.com\/\w+\.jpg/;
var a=document.getElementsByTagName("a");
var n=a.length;//連結計數
for(var i=0;i<n;i++)
{
   //如果連結匹配,連結前加入pStr
   if(regex.test(a[i].href))
   {
       a[i].href=pStr+a[i].href;
    }
}
})();



版本二 - 圖片
代碼:
(function() {
var pStr="http://www.proxy.com/http/";
//建立正則,匹配http://www『1~3位數字』.pic.com/『至少一個英、數、_字元』.jpg
var regex=/http:\/\/www[0-9]{1,3}\.pic\.com\/\w+\.jpg/;
var a=document.images;
var n=a.length;//圖片計數
for(var i=0;i<n;i++)
{
   //如果圖片連結匹配,置換圖片連結
   if(regex.test(a[i].src))
   {
       a[i].src=a[i].src.replace("http://",pStr);
    }
}
})();



版本二 - 連結
代碼:
(function() {
var pStr="http://www.proxy.com/http/";
//建立正則,匹配http://www『1~3位數字』.pic.com/『至少一個英、數、_字元』.jpg
var regex=/http:\/\/www[0-9]{1,3}\.pic\.com\/\w+\.jpg/;
var a=document.getElementsByTagName("a");
var n=a.length;//連結計數
for(var i=0;i<n;i++)
{
   //如果連結匹配,置換連結
   if(regex.test(a[i].href))
   {
       a[i].href=a[i].href.replace("http://",pStr);
    }
}
})();


版本一 - 純文字
代碼:
(function() {
var pStr="http://www.proxy.com/proxy.php?u=";
//建立正則,匹配http://www『1~3位數字』.pic.com/『至少一個英、數、_字元』(非貪婪).jpg//g全部
var regex=/(http:\/\/www[0-9]{1,3}\.pic\.com\/\w+?\.jpg)/g;

var a=[];
//Node.TextNodeArray
function tna(o)
{   
   var o=o.childNodes;
   var n=o.length;
   for (var i=0;i<n;i++)
   {
      if(!!o[i]&&o[i].nodeType===3)//存在且為文字節點
      {
         a.push(o[i]);
      }
      else if (o[i].childNodes)//是否undefined
      {
         tna(o[i]);
      }
   }
   return a;
};

var text=tna(document.body);//body底下的所有文字節點
var n=a.length;//計數
for(var i=0;i<n;i++)
{
   if(regex.test(text[i].nodeValue))
   {
      //置換
      text[i].nodeValue=text[i].nodeValue.replace(regex,pStr+"$1");
   }
}
})();


版本二 - 純文字
代碼:
(function() {
var pStr="http://www.proxy.com/http/";
//建立正則,匹配http://www『1~3位數字』.pic.com/『至少一個英、數、_字元』(非貪婪).jpg//g全部
var regex=/http:\/\/(www[0-9]{1,3}\.pic\.com\/\w+?\.jpg)/g;

var a=[];
//Node.TextNodeArray
function tna(o)
{   
   var o=o.childNodes;
   var n=o.length;
   for (var i=0;i<n;i++)
   {
      if(!!o[i]&&o[i].nodeType===3)//存在且為文字節點
      {
         a.push(o[i]);
      }
      else if (o[i].childNodes)//是否undefined
      {
         tna(o[i]);
      }
   }
   return a;
};

var text=tna(document.body);//body底下的所有文字節點
var n=a.length;//計數
for(var i=0;i<n;i++)
{
   if(regex.test(text[i].nodeValue))
   {
      //置換
      text[i].nodeValue=text[i].nodeValue.replace(regex,pStr+"$1");
   }
}
})();

發表人:  ovo [ 2009-07-19, 14:10 ]
文章主題 : 

行了,非常感謝,解答得十分詳細,有勞了。 :D

1 頁 (共 1 頁) 所有顯示的時間為 UTC + 8 小時
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/