2010-04-08 11 views
5

Korzystam z poniższego skryptu, aby wymusić określoną stronę - po wczytaniu po raz pierwszy - do elementu iframe (innej firmy).Wykrywanie adresów URL za pomocą JavaScriptu

<script type="text/javascript"> 
    if(window.top==window) { 
     location.reload() 
    } else { 
    } 
</script> 

(Dla wyjaśnienia: Ten „osadzanie” odbywa się automatycznie przez system trzeciej, ale tylko wtedy, gdy strona jest odświeżana raz - do stylizacji i kilka innych powodów, chcę go tam od początku.)

W tej chwili zastanawiam się, czy można ulepszyć ten skrypt w taki sposób, aby był w stanie wykryć bieżący adres URL swojego "nadrzędnego" dokumentu, aby uruchomić określone działanie? Załóżmy, że adres URL witryny firmy zewnętrznej to "http://cgi.site.com/hp/ ...", a adres URL ramki iFrame "http://co.siteeps.com/hp/ ...". Czy możliwe jest zrealizowanie czegoś. jak to z JS:

<script type="text/javascript"> 
    if(URL is 'http://cgi.site.com/hp/...') { 
     location.reload() 
    } 
    if(URL is 'http://co.siteeps.com/hp/...') { 
     location.do-not.reload() resp. location.do-nothing() 
    } 
</script> 

TIA josh

Odpowiedz

7
<script type="text/javascript"> 
    if(/^http:\/\/cgi.site.com\/hp\//.test(window.location)) { 
     location.reload() 
    } 
    if(/^http:\/\/co.siteeps.com\/hp\//.test(window.location)) { 
     location.do-not.reload() resp. location.do-nothing() 
    } 
</script> 

Oczywiście, jeśli drugi jest zbędny, więc można po prostu to zrobić:

<script type="text/javascript"> 
    if(/^http:\/\/cgi.site.com\/hp\//.test(window.location)) { 
     location.reload() 
    } 
</script> 

Co robisz tutaj jest testowanie window.location z wyrażeniem regularnym, aby sprawdzić, czy pasuje do pożądanego adresu URL.

Jeśli chcesz odwołać się do adresu URL rodzica, możesz użyć parent.location.href.

Per Twojego komentarza, w przypadku, gdy chcesz zrobić coś inny można zrobić coś takiego:

<script type="text/javascript"> 
    if(/^http:\/\/cgi.site.com\/hp\//.test(window.location)) { 
     location.reload() 
    } 
    else if(/^http:\/\/co.siteeps.com\/hp\//.test(window.location)) { 
     //do something else 
    } 
</script> 

Jeśli robisz nic w innym przypadku, to skutecznie NOP (bez operacji), więc nie potrzebujesz nawet tam (tamtego), ponieważ będzie to pusty blok.

+0

Witaj, żywy! thx za natychmiastową odpowiedź! Co powinienem zdefiniować zamiast "location.do-not.reload() resp. location.do-nothing() "? – josh

+0

jest jeśli ... jeśli ... możliwe z js? czy potrzebuję "innego"? – josh

+0

Zakładając, że poprawnie rozumiem Twój przepływ logiczny, możesz * tylko * dokonać przeładowania, jeśli adres URL pasuje do 'http: // cgi.site.com/hp'. Jeśli tak jest, nie potrzebujesz innego, ponieważ naprawdę nic nie robisz. Oczywiście, jeśli chcesz coś zrobić * jeszcze *, możesz użyć 'else if (...) {...}' –

2

Można użyć adresu window.location.href, aby uzyskać adres URL do porównania ciągów. Jeśli jesteś w elemencie iframe i musisz znać adres URL rodziców: parent.location.href, powinien to zrobić.

Powiązane problemy