4

AがFacebookにリンクを投稿し、BがChromeでそのリンクをクリックすると(Firefoxではなく、他のユーザーをテストしていません)、Bはタブに表示される青い背景アイコン(favicon.ico)にFacebookの白い「f」を表示します。リンクされたページの。場合によっては、おそらくページに独自のファビコンがある場合、そのタブを更新するとアイコンが正しいアイコンに置き換えられます。しかし、ほとんどの場合、Facebookのファビコンは残ります。最初は、Facebookが何らかのトリッキーな方法でフレームを使用していると信じていましたが、ソースの表示を使用しているため、そうではないようです。Facebookのように、リンクされたページに自分のファビコンをプリロードするような方法で、どのようにhrefまたはリダイレクトをプログラムしますか?

(スクリーンショット)

これが私が成功せずに試したことです。私のアイコンは何も置き換えられません(Firefoxのタブとナビゲーションバーの両方にのみ表示され、Chromiumのタブにのみ表示されますが、それは重要ではありません):

http://unixshell.jcomeau.com/tmp/linktest/index.html

jcomeau@unixshell:~/www/www/tmp/linktest$ cat index.html
<html>
<head>
<link rel="shortcut icon" href="favicon.ico" />
</head>
<body>
<a href="redirect.html?url=http://homesteadingsurvivalism.myshopify.com/">homesteadingsurvivalism.myshopify.com</a>
</body>
</html>
jcomeau@unixshell:~/www/www/tmp/linktest$ cat redirect.html 
<html>
<head>
<link rel="shortcut icon" href="favicon.ico" />
<script language="javascript" type="text/javascript">
var newpage = window.location.search.substring(5);
window.setTimeout('window.location = newpage; ', 3000);
</script>
</head>
<body>
<p>Redirecting to selected site, please wait...</p>
</body>

Yanのコメントの後、redirect.cgiも成功せずに試しました。

jcomeau@unixshell:~/www/www/tmp/linktest$ cat redirect.cgi; QUERY_STRING=url=http://this.is.a.test/ ./redirect.cgi 
#!/bin/bash
echo -ne "Content-type: text/html\r\n"
echo -ne "Location: ${QUERY_STRING:4}\r\n"
echo -ne "\r\n"
cat <<-EOF
    <html>
    <head>
    <link rel="shortcut icon" href="favicon.ico" />
    </head>
    <body>
    Redirecting to ${QUERY_STRING:4}
    </body>
    </html>
    EOF
Content-type: text/html
Location: http://this.is.a.test/

<html>
<head>
<link rel="shortcut icon" href="favicon.ico" />
</head>
<body>
Redirecting to http://this.is.a.test/
</body>
</html>
4

2 に答える 2

2

http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBwCjI4mWPFI&h=yAQG6-ic8AQF_aOjn3QCJxdul6VnDN1Ho_ltT2gX90NF-VにGETリクエストを送信すると次の応答(読みやすくするためにHTMLにいくつかの改行を追加しました):

HTTP/1.1 200
Content-Length: 349
Cache-Control: private, no-cache, no-store, must-revalidate
Expires: Sat, 01 Jan 2000 00:00:00 GMT
P3P: CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"
Pragma: no-cache
Refresh: 1;URL=http://www.youtube.com/watch?v=BwCjI4mWPFI
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Set-Cookie: ***removed***
Content-Type: text/html; charset=utf-8
X-FB-Debug: ***removed***
Date: Fri, 27 Apr 2012 00:49:25 GMT
Connection: close

<html>
<head></head>
<body>
<script type="text/javascript">
document.location.replace("http:\/\/www.youtube.com\/watch?v=BwCjI4mWPFI");
</script>
<script type="text/javascript">
setTimeout("(new Image()).src=\"\\\/laudit.php?r=JS&u=http\\u00253A\\u00252F\\u00252Fwww.youtube.com\\u00252Fwatch\\u00253Fv\\u00253DBwCjI4mWPFI\";",5000);
</script>
</body>
</html>

短い試用版では、Refreshヘッダーがこれを機能させるのに十分であることがわかります。これはPHPでの簡単な実装です。

<?php

header("Refresh: 1;URL=http://www.a-website-without-favicon.com/");

?>

ただし、前述のように、これは、参照しているWebサイトにファビコンがない場合にのみ機能します。

于 2012-04-27T00:54:45.237 に答える
1

Facebookがどのようにそれを行っているかは完全にはわかりませんが、ここで提案されているように、プロキシPHPスクリプトとAJAXコンテンツロードを使用してみてください。

/* proxy.php */
<?php echo file_get_contents($_GET['url']);?>


<html><body><div id="contentArea"></div></body></html>

$("#contentArea").load('proxy.php?url=http://example.com');

まず、好みのを使用して独自の空白ページをロードしますfavicon.ico。次に、AJAXを使用して、古いものを保持したまま優先コンテンツをロードしますfavicon.ico

于 2012-04-17T02:44:37.057 に答える