2011-08-04 3 views
0

다른 웹 사이트/포럼에 배치 할 수있는 위젯을 만들고 싶습니다.자바 스크립트 및 ID 충돌 웹 마스터 용 위젯

<script type="text/javascript" src="http://example.com/x.js" /> 
<div id="myid"></div> 

그러나 문제가있다 - 사람이 하나 개의 웹 사이트에 두 개 이상의 같은 위젯을 넣을 때 때문에 ID의 제대로 작동하지 않습니다는.

이러한 상황을 방지하려면 어떻게해야합니까?

JS에서이 div에 액세스해야하므로 클래스를 사용할 수 없습니다. ID 끝에 임의로 생성 된 숫자를 추가하는 방법에 대해 생각했지만 여전히 ID 충돌 가능성이 있습니다 (작지만,있을 수 있습니다).

+0

글쎄, 사용자가 여러 위젯을 원할 때 여러 개의 SCRIPT 요소를 붙여 넣기를 원하지는 않습니다. SCRIPT 요소는 JavaScript 파일이 하나뿐이므로 한 번만 존재해야합니다. 그래서, 당신이하고 싶은 것은 여러 위젯을위한 메커니즘을 가지고 있습니다. 예를 들어, 사용자는 SCRIPT 요소를 한 번만 (페이지의 맨 아래에) 붙여 넣은 다음 페이지의 모든 위젯 인스턴스에 대해 DIV 요소를 붙여 넣습니다. 당신은 **이 수업을 ** 사용할 수 있습니다. 그런 다음 스크립트는 클래스 이름으로 DIV를 가져온 다음 해당 DIV에 대한 코드를 실행합니다. –

답변

0

처리 할 때 div를 생성하고 고유 한 ID를 할당하는 스크립트를 포함시킬 수 있습니다. (그 논리 내에서 중복을 확인할 수 있습니다.)

위젯이 1,000 번 포함되지 않는다고 가정하면 ... (테스트되지 않은) 이와 같은 것이 작동해야합니다.

var uniqueID; 
var foundUniqueID = false; 
var idx = 0; 
while(foundUniqueID != true){ 
    uniqueID = 'myID_' + idx; 
    if(document.getElementById(uniqueID)){ 
    idx++; 
    } else { 
    foundUniqueID = true; 
    } 
} 
//create your DIV with your uniqueID etc. 
1

가장 좋은 방법은 유연성을 높이는 것입니다. 그래서, 정의 된 html id를 가지지 않고 사용자가 그것을 갖도록 강요하는 대신, 사용자가 자신의 id를 선택하게하는 방법을 제공해야합니다. 그래서 전화를해야합니다. 이 같은

뭔가는 청소기 :

<script type="text/javascript" src="http://example.com/x.js"></script> 
<script type="text/javascript"> 
    X.callMethod("myId"); 
</script> 
<div id="myid"></div> 

이 방법은 두 가지 장점이 있습니다

  • 사용자가 사용자가 그가 당신에서 원하는 것을 행동 지정 고유의 ID를
  • 을 정의 할 수 있습니다를 스크립트. 즉, 같은 방법으로 사용할 수있는 다른 방법을 추가 할 수 있습니다. 사용자가 코드에 방해가되는 느낌이 없습니다, 그가 기능을 원하는지 여부를 결정하는 사람이 그 사람입니다.
+2

좋은 지적이지만 * 모듈 식 *은 잘못된 용어입니다. 아마도 유연한 * 또는 * 적응 가능한 *을 의미했을 것입니다. –

+0

감사합니다, 제 영어는 유창하지 않습니다;) –

관련 문제