>  기사  >  웹 프론트엔드  >  javascript SocialHistory 방문자가 특정 site_javascript 기술을 방문했는지 확인하십시오.

javascript SocialHistory 방문자가 특정 site_javascript 기술을 방문했는지 확인하십시오.

WBOY
WBOY원래의
2016-05-16 19:02:05855검색
할 수 있습니다. 방문함
window.onload = function() {
var sl = new SocialHistory()
Alert(sl.doesVisit("www.jb51.net"))
}
사용자가 www.jb51.net을 사용한 적이 있으면 이 함수는 true를 반환하고, 그렇지 않으면 false를 반환합니다.

사실 원리는 복잡하지 않습니다. 링크의 a:visited 의사 클래스 속성을 사용합니다. 먼저 페이지에서 iframe을 생성하고 a 및 a:visited를 이 iframe의 다른 스타일로 설정합니다. 그런 다음 웹사이트 링크를 iframe에 삽입합니다. 브라우저는 사용자의 액세스 기록을 기반으로 방문한 링크에 대해 a:visited 스타일을 설정합니다. 마지막으로 링크의 최종 스타일을 구하게 되면 a:visited인 경우 해당 웹사이트를 방문한 것으로 간주할 수 있습니다. 구체적인 구현 방법은 소스 코드를 참조하세요.

이 스크립트는 주로 사용자가 사용하는 웹사이트를 올바르게 표시할 수 있는 소셜 북마크 아이콘을 표시하는 데 사용됩니다. 하지만 이러한 접근 방식이 사용자의 개인 정보를 도용하는 것으로 의심되는 것은 아닌가 걱정됩니다. 이 방법은 사용자가 특정 웹 사이트를 방문했는지 여부만 확인할 수 있지만 모든 접속 기록을 무제한으로 얻을 수는 없습니다.



/*
* 소셜 제한 - 관심 있는 소셜만.
*
* 사이트에서 어떤 소셜 북마크 배지를 표시할지 알 수 있습니다.
* 방문객. 사용자가 방문한 모든 소셜 사이트를 알려주거나
* 특정 항목을 검색하세요.
*
* 예:
*
* var sl = SocialHistory();
* 경고( sl.doesVisit("Digg") ); // true/false를 반환하며, 알 수 없으면 -1을 반환합니다.
* var listOfVisitedSites = sl.visitedSites();
* varcheckedSites = sl.checkedSites();
*
* 확인할 사이트를 더 추가하고 싶다면 사전으로 전달할 수 있습니다
* 기록으로:
*
* var more = { "Humanized": "http://humanized.com",
* "Azarask.in": ["http://azarask.in", "http://azarask.in/blog"]
* };
* var sl = SocialHistory(more);
* alert( sl.doesVisit("Humanized") );
*
* For a list of built-in sites, see the sites variable below.
*
* Copyright (c) 2008 Aza Raskin (http://azarask.in/blog)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
*/

var SocialHistory = function( moreSites ){

var sites = {
"Digg": ["http://digg.com", "http://digg.com/login"],
"Reddit": ["http://reddit.com", "http://reddit.com/new/", "http://reddit.com/controversial/", "http://reddit.com/top/", "http://reddit.com/r/reddit.com/", "http://reddit.com/r/programming/"],
"StumbleUpon": ["http://stumbleupon.com"],
"Yahoo Buzz": ["http://buzz.yahoo.com"],
"Facebook": ["http://facebook.com/home.php", "http://facebook.com", "https://login.facebook.com/login.php"],
"Del.icio.us": ["https://secure.del.icio.us/login", "http://del.icio.us/"],
"MySpace": ["http://www.myspace.com/"],
"Technorati": ["http://www.technorati.com"],
"Newsvine": ["https://www.newsvine.com", "https://www.newsvine.com/_tools/user/login"],
"Songza": ["http://songza.com"],
"Slashdot": ["http://slashdot.org/"],
"Ma.gnolia": ["http://ma.gnolia.com/"],
"Blinklist": ["http://www.blinklist.com"],
"Furl": ["http://furl.net", "http://furl.net/members/login"],
"Mister Wong": ["http://www.mister-wong.com"],
"Current": ["http://current.com", "http://current.com/login.html"],
"Menaeme": ["http://meneame.net", "http://meneame.net/login.php"],
"Oknotizie": ["http://oknotizie.alice.it", "http://oknotizie.alice.it/login.html.php"],
"Diigo": ["http://www.diigo.com/", "https://secure.diigo.com/sign-in"],
"Funp": ["http://funp.com", "http://funp.com/account/loginpage.php"],
"Blogmarks": ["http://blogmarks.net"],
"Yahoo Bookmarks": ["http://bookmarks.yahoo.com"],
"Xanga": ["http://xanga.com"],
"Blogger": ["http://blogger.com"],
"Last.fm": ["http://www.last.fm/", "https://www.last.fm/login/"],
"N4G": ["http://www.n4g.com"],
"Faves": ["http://faves.com", "http://faves.com/home", "https://secure.faves.com/signIn"],
"Simpy": ["http://www.simpy.com", "http://www.simpy.com/login"],
"Yigg": ["http://www.yigg.de"],
"Kirtsy": ["http://www.kirtsy.com", "http://www.kirtsy.com/login.php"],
"Fark": ["http://www.fark.com", "http://cgi.fark.com/cgi/fark/users.pl?self=1"],
"Mixx": ["https://www.mixx.com/login /dual", "http://www.mixx.com"],
'Google 북마크': ["http://www.google.com/ 북마크", "http://www.google.com/ig/add?moduleurl=bookmarks.xml&hl=en" ],
"Subbmitt": ["http://submitt.com/"]
};

( var 사이트 더보기사이트 ) {
// 해당 사이트가 없으면 URL 목록을 만들어주세요.
if( 유형(사이트 [사이트] ) == "정의되지 않음" ) 사이트[사이트] = [];

// 값이 문자열인 경우 해당 값을 URL 목록에 푸시하면 됩니다.
if( type( moreSites [사이트] ) == "문자열" )
사이트[사이트].푸시( 더보기사이트[사이트] );
그밖에
사이트[사이트] = 사이트[사이트].concat( more사이트 [사이트] );
}

var 방문 = {};

함수 getStyle(el,scopeDoc,styleProp) {
if (el.currentStyle )
var y = el.currentStyle[styleProp];
else if (. getCompulatedStyle)
var y =scopeDoc.defaultView.getCompulatedStyle(el,null).getPropertyValue(styleProp);
반품y;
}

기능 제거( el ) {
el.parentNode.removeChild();
}

// 다음에서 영감을 받은 코드:
//bindzus.wordpress.com/2007/12/24/adding-dynamic-contents-to-iframes
함수 createIframe() {
var iframe = 문서.createElement("iframe");
iframe.스타일.위치= "절대";
iframe.스타일.가시성 = "숨김";

문서.본체.appendChild(iframe);

// 파이어폭스, 오페라
if(iframe.contentDocument) iframe.doc = iframe.contentDocument ;
// 인터넷 익스플로러
else if(iframe. contentWindow) iframe.doc = iframe. contentWindow.문서;

// Magic: 몸체 강제 생성(IE에서는 기본적으로 null임).
// 방문/비방문 링크의 스타일도 강제 적용합니다.
iframe.doc.열기();
iframe.doc.쓰기(');
iframe.doc.쓰기("a{색상: #000000; 디스플레이:없음;}");
iframe.doc.쓰기("a:방문함 {색상: #FF0000; 디스플레이:인라인;}");
iframe.doc.쓰기('');
iframe.doc.닫기();

// iframe 반환: iframe.doc에는 iframe이 포함되어 있습니다.
반환 iframe;
}

var iframe = createIframe();

기능 embedLinkInIframe( href, 텍스트 ) {
vara = iframe.doc.createElement("a");
a.href = href;
.innerHTML = 사이트;
iframe.doc.body.appendChild( );
}

( var 사이트 사이트 ) {
var URL = 사이트[사이트];
for( vari= 0; iurl.length; 나는 ) {
// IE에서는 iframe 범위 내에서 요소를 생성해야 합니다.
embedLinkInIframe( url[i], 사이트 );

// "www"가 있거나 없는 다양한 URL을 자동으로 시도합니다.
if( url[i].일치(/www./) ){
var sansWWW = url[i].바꾸기(/www./, "");
embedLinkInIframe( sansWWW, 사이트 );
} 그밖에 {
// 슬라이스 오프셋의 문자열 1 길이에 대해 2 = 1
var httpLen = url[i].indexOf("//") 2;
var withWWW = url[i].하위 문자열(0, httpLen ) "www." URL[i].하위 문자열( httpLen );
embedLinkInIframe( withWWW, 사이트 );
}

}
}

var 링크 = iframe.doc.본체.childNodes;
for( vari= 0; i링크.길이; ) {
// Firefox/Safari 및 IE를 각각 처리합니다.
var displayValue = getStyle(링크[i], iframe.doc, "디스플레이");
var didVisit = displayValue != "없음";

if( 방문 ){
방문했습니다[링크[i].innerHTML ] = ;
}
}
제거( iframe );

반품 신규 (기능( ){
var 중고 사이트 = [];
( var 사이트 ){
사용된 사이트.푸시(사이트);
}

// 방문한 사이트의 배열을 반환합니다.
이것.visitedSites = 기능 () {
반품 중고 사이트;
}

// true/false를 반환합니다. 사이트를 확인하지 않은 경우 -1을 반환합니다.
이것.doesVisit = 기능 ( 사이트) {
if( 유형(사이트 [사이트] ) == "정의되지 않음" )
반품 -1;
반품 유형(방문[ 사이트] ) != "정의되지 않음" ;
}

var selectedSites = [];
( var 사이트 사이트 ){
checkedSites.push(사이트);
}
// 체크한 사이트 목록을 반환합니다.
이것.checkedSites = 기능 (){
반품 확인된 사이트;
}
})();
}
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.