Łącza do określonej części strony internetowej

93

Jak utworzyć łącze do części długiej strony w innej witrynie, której nie kontroluję?

Pomyślałem, że możesz użyć wariantu #partofpage na końcu mojego linku. Jakieś sugestie?

mjmuk
źródło
Aby połączyć tę część odpowiedzi, użyj poniższego linku, stackoverflow.com/questions/15481911/…
Ruturaj Bisure
Aby połączyć tę część strony, użyj poniższego linku, stackoverflow.com/questions/15481911/…
Ruturaj Bisure

Odpowiedzi:

82

Po prostu dołącz a, #a po nim identyfikator <a>tagu (lub innego tagu HTML, np. A <section>), do którego próbujesz się dostać. Na przykład, jeśli próbujesz utworzyć link do nagłówka w tym kodzie HTML:

<p>This is some content.</p>
<h2><a id="target">Some Header</a></h2>
<p>This is some more content.</p>

Możesz użyć linku <a href="http://url.to.site/index.html#target">Link</a>.

Osoba
źródło
3
Co się stanie, jeśli ten identyfikator jest używany wielokrotnie? Natknąłem się na witrynę MS, która wielokrotnie używała znaku idof, id="in-closing">Some string</id>gdzie kilka razy Some stringstała się nowym ciągiem znaków.
kayleeFrye_onDeck
5
@kayleeFrye_onDeck Twój kod HTML jest nieprawidłowy, jeśli jest wiele id. Z definicji idma być unikalny dla tego tagu
Kolob Canyon
1
Dzięki za wyjaśnienie, @KolobCanyon! :)
kayleeFrye_onDeck
czy istnieje sposób, aby to zrobić z klasą, która jest używana tylko raz?
Chagai Friedlander
Może byłem po prostu naiwny, ale kiedy przypadkiem www.site.com/page/#targetto się nie udało. Upewnij się, że nie masz /na końcu adresu URL.
noah
29

Utwórz „link przeskoku” w następującym formacie:

http://www.somesite.com/somepage#anchor

Gdzie zakotwiczenie to identyfikator elementu, do którego ma prowadzić łącze na tej stronie. Użyj narzędzi programistycznych przeglądarki / wyświetl źródło, aby znaleźć identyfikator elementu, do którego chcesz utworzyć link.

Jeśli element nie ma identyfikatora i nie kontrolujesz tej witryny, nie możesz tego zrobić.

osłony
źródło
Co się stanie, jeśli z określoną częścią strony internetowej nie jest powiązany identyfikator?
ajaysinghnegi
Następnie musisz dodać identyfikator do elementu
osłony
1
Czy mogę dodać identyfikator do tagu na stronie internetowej w Internecie?
ajaysinghnegi
2
Nie, jeśli chcesz to zrobić w innej witrynie, możesz spróbować utworzyć niestandardową bookmarklet JS, aby przewijać do części, do której chcesz przewinąć. Nie możesz sprawić, by zakotwiczone linki działały, jeśli identyfikatory nie są skonfigurowane.
osłony
Czy możesz podać link do czegoś, co wskazałeś powyżej, aby to zrobić? Nie robiłem wcześniej niczego takiego.
ajaysinghnegi
10

Jest to możliwe tylko wtedy, gdy ta witryna zadeklarowała kotwice na stronie. Odbywa się to poprzez nadanie tagowi nazwy lub atrybutu identyfikatora , więc szukaj tych, które znajdują się blisko miejsca, do którego chcesz utworzyć link.

A potem składnia byłaby

<a href="page.html#anchor">text</a>
fredrik
źródło
nameAtrybut jest obsługiwana tylko na <a>element tego, i to jest przestarzałe w HTML 5.
Quentin
Dla mnie skupia się zbyt nisko na elemencie. Czy ktoś miał to samo?
Kolob Canyon
8

W przypadku, gdy strona docelowa znajduje się w tej samej domenie (tj. Ma to samo źródło co Twoja strona) i nie masz nic przeciwko tworzeniu nowych zakładek (1), możesz (ab) użyć JavaScript :

<a href="javascript:void(window.open('./target.html').onload=function(){this.document.querySelector('p:nth-child(10)').scrollIntoView()})">see tenth paragraph on another page</a>

Drobnostki:

var w = window.open('some URL of the same origin');
w.onload = function(){
  // do whatever you want with `this.document`, like
  this.document.querySelecotor('footer').scrollIntoView()
}

Działającym przykładem takiego „exploita”, który możesz teraz wypróbować, może być:

javascript:(function(url,sel,w,el){w=window.open(url);w.addEventListener('load',function(){w.setTimeout(function(){el=w.document.querySelector(sel);el.scrollIntoView();el.style.backgroundColor='red'},1000)})})('/programming/45014240/link-to-a-specific-spot-on-a-page-i-cant-edit','footer')

Jeśli wpiszesz to w pasek adresu (pamiętaj, że Chrome usunie javascript:prefiks po wklejeniu ze schowka) lub ustawisz go jako hrefwartość dowolnego linku na tej stronie (za pomocą Narzędzi dla programistów) i klikniesz go, otrzymasz kolejną (zduplikowaną) stronę z pytaniem SO przewiniętą do stopka i stopka pomalowane na czerwono. (Dodano opóźnienie jako obejście dla treści ładowanej przez Ajax, która przesuwa stopkę w dół po załadowaniu).

Uwagi

  • Testowane w aktualnej wersji Chrome i Firefox, generalnie powinno działać, ponieważ opiera się na zdefiniowanym standardowym zachowaniu.
  • Nie można ich zilustrować w interaktywnym fragmencie kodu tutaj w SO, ponieważ są one odizolowane od pochodzenia strony.
  • MDN: Window.open ()
  • (1) window.open(url,'_self')wydaje się przerywać loadwydarzenie; w zasadzie sprawia, że window.openzachowuje się jak normalna a href=""nawigacja po kliknięciu; nie zbadałem jeszcze więcej.
myf
źródło
huh, nie przewinęło się na sam dół, a spód nie jest czerwony
John D,
1
… I przypuszczam, że nie otworzyło nowego okna. Najprawdopodobniej dlatego, że wykonywanie javascript:linków wpisywanych w pasku adresu URL nie działa już w większości przeglądarek z domyślnymi ustawieniami, takimi jak zapobieganie „self-XSS”. Ale możesz to wypróbować w konsoli Web Developers, gdzie powinno działać dobrze.
myf
czy ktoś mógłby to zmienić i ułatwić korzystanie z niego? Nie jestem ekspertem od javascript i nie mogłem wymyślić, co robić
Chagai Friedlander
3

Pierwszy cel odnosi się do identyfikatora BlockID znajdującego się w kodzie HTML lub narzędziach programistycznych Chromes, do których próbujesz utworzyć link. Każdy kod jest inny i będziesz musiał trochę poszukać, aby znaleźć identyfikator, do którego próbujesz się odwołać. Powinien wyglądać mniej więcej tak. div class="page-container drawer-page-content" id"PageContainer"Zwróć uwagę, że jest to format całej sekcji, do której się odwołuje, a nie pojedynczego tekstu lub obrazu. Aby to zrobić, musisz znaleźć ten sam fragment kodu, ale odnoszący się do bloku docelowego. Na przykład w dv id="your-block-id"każdym razie właśnie czytałem ten wątek i przyszedł mi do głowy pomysł, jeśli jesteś użytkownikiem Shopify i chcesz to zrobić, jest to prawie to samo, co powiedziałem. Ale zamiast

> http://url.to.site/index.html#target

Położyłbyś

> http://storedomain.com/target

Na przykład konfiguruję stronę z zastrzeżeniem z linkami prowadzącymi do subskrypcji biuletynu i bloków zakupów na mojej stronie głównej, więc wstawiam https://mystore-classifier.com/#shopify-section-1528945200235hiperłącze. Pamiętaj, że -klasyfikator służy do mojego użytku wewnętrznego i nie dotyczy Ciebie. To tylko po to, aby móc śledzić moje sklepy. Jeśli chcesz umieścić link do czegoś innego niż strona główna, umieść

> http://mystore-classifier.com/pagename/#BlockID

Mam nadzieję, że ktoś uznał to za przydatne, jeśli coś jest nie tak z moim wyjaśnieniem, daj mi znać, ponieważ nie jestem programistą HTML, mój język to C #!

Ryan Buchanan
źródło
3

Nadchodząca funkcja „Przewiń do tekstu” w Chrome jest dokładnie tym, czego szukasz ....

https://github.com/bokand/ScrollToTextFragment

Zasadniczo dodajesz #targetText=na końcu adresu URL, a przeglądarka przewinie do tekstu docelowego i podświetli go po załadowaniu strony.

Jest w wersji Chrome, która działa na moim biurku, ale obecnie musi być ręcznie włączona. Prawdopodobnie wkrótce zostanie domyślnie włączony w produkcyjnych wersjach Chrome, a inne przeglądarki będą podążać za nim, więc OK, aby rozpocząć dodawanie do swoich linków teraz, a wtedy zacznie działać.

bigjosh
źródło