Ссылка на определенную часть веб-страницы


93

Как мне создать ссылку на часть длинной веб-страницы на другом веб-сайте, который я не контролирую?

Я подумал, что вы можете использовать вариант #partofpage в конце моей ссылки. Какие-либо предложения?



Чтобы связать эту часть ответа, используйте следующую ссылку, stackoverflow.com/questions/15481911/…
— Ruturaj Bisure

Чтобы связать эту часть страницы, используйте следующую ссылку: stackoverflow.com/questions/15481911/…
— Ruturaj Bisure

Ответы:


82

Просто добавьте, за #которым следует идентификатор <a>тега (или другого HTML-тега, например, a <section>), к которому вы пытаетесь добраться. Например, если вы пытаетесь создать ссылку на заголовок в этом HTML:

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

Вы можете воспользоваться ссылкой <a href="http://url.to.site/index.html#target">Link</a>.


3
Что, если этот идентификатор используется несколько раз? Я столкнулся с сайтом MS, который использовал the idof id="in-closing">Some string</id>несколько раз, где Some stringпару раз становился новой строкой.
— kayleeFrye_onDeck

5
@kayleeFrye_onDeck Ваш HTML-код недействителен, если их несколько id. По определению idдолжен быть уникальным для этого тега
— Каньон Колоб

1
Спасибо за разъяснения, @KolobCanyon! :)
— kayleeFrye_onDeck

есть ли способ сделать это с классом, который используется только один раз?
— Chagai Friedlander

Возможно, я был просто наивен, но когда я сделал www.site.com/page/#targetэто случайно, это не удалось. Убедитесь, что /в конце URL-адреса нет символа.
— Ной

29

Создайте «ссылку перехода», используя следующий формат:

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

Где якорь - это идентификатор элемента, на который вы хотите создать ссылку на этой странице. Используйте инструменты разработки браузера / просмотрите исходный код, чтобы найти идентификатор элемента, на который вы хотите создать ссылку.

Если у элемента нет идентификатора, и вы не контролируете этот сайт, вы не можете этого сделать.


Что делать, если конкретная часть веб-страницы не имеет связанного с ней идентификатора?
— ajaysinghnegi

Затем вам нужно добавить идентификатор к элементу
— cowls

1
Могу ли я добавить идентификатор к тегу на веб-странице в Интернете?
— ajaysinghnegi

2
Нет, если вы хотите сделать это на другом веб-сайте, вы можете попробовать создать собственный букмарклет JS для прокрутки до той части, которую вы хотите прокрутить. Вы не можете заставить работать привязанные ссылки, если идентификаторы не настроены.
— cowls

Можете ли вы сделать ссылку на то, что вы указали выше? Я раньше ничего подобного не делал.
— ajaysinghnegi

10

Это возможно только в том случае, если этот сайт объявил якоря на странице. Это делается путем присвоения тегу имени или атрибута id. , поэтому ищите любой из них, близкий к тому, на что вы хотите ссылку.

И тогда синтаксис будет

<a href="page.html#anchor">text</a>

nameАтрибут поддерживается только на <a>элементе для этого, и это является устаревшим в HTML 5.
— Квентин

Для меня это слишком низкое внимание к элементу. С кем-нибудь случалось то же самое?
— Каньон Колоб

8

Если целевая страница находится в том же домене (т.е. имеет то же происхождение, что и ваша страница), и вы не возражаете против создания новых вкладок (1), вы можете (ab) использовать некоторый 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>

Интересный факт:

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()
}

Рабочий пример такого «эксплойта», который вы можете попробовать прямо сейчас, может быть:

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')

Если вы введете это в адресную строку (помните, что Chrome удаляет javascript:префикс при вставке из буфера обмена) или сделайте егоhref значением любой ссылки на этой странице (с помощью инструментов разработчика) и щелкните по нему, вы получите еще одну (дублированную) страницу вопроса SO с прокруткой до нижний и нижний колонтитулы окрашены в красный цвет. (Задержка добавлена ​​в качестве обходного пути для содержимого, загруженного с помощью ajax, смещающего нижний колонтитул после загрузки.)

Примечания

  • Протестировано в текущих версиях Chrome и Firefox, обычно должно работать, поскольку оно основано на определенном стандартном поведении.
  • Не могут быть проиллюстрированы в интерактивном фрагменте здесь, в SO, потому что они изолированы от источника страницы.
  • MDN: Window.open ()
  • (1) window.open(url,'_self')кажется, нарушает loadсобытие; в основном заставляет window.openвести себя как обычная a href=""навигация по щелчку; еще не исследовал.

да, он не прокручивался вниз, а нижний не красный
— John D

1
… И, полагаю, это не открыло новое окно. Скорее всего, потому, что выполнение javascript:ссылок, введенных в адресную строку, больше не работает в большинстве браузеров с настройками по умолчанию, как предотвращение самонастройки XSS. Но вы можете попробовать его в консоли веб-разработчиков, где он должен хорошо работать.
— myf

может кто-нибудь отредактировать это и упростить использование? Я не эксперт по javascript и не мог понять, что делать
— Чагай Фридлендер

3

В первую очередь цель относится к BlockID, найденному в инструментах разработчика HTML-кода или хрома, на которые вы пытаетесь установить ссылку. Каждый код отличается, и вам нужно будет немного покопаться, чтобы найти идентификатор, на который вы пытаетесь сослаться. Он должен выглядеть примерно так. div class="page-container drawer-page-content" id"PageContainer"Обратите внимание, что это формат для всего указанного раздела, а не для отдельного текста или изображения. Для этого вам нужно будет найти тот же фрагмент кода, но относящийся к вашему целевому блоку. Например, в dv id="your-block-id"любом случае, я просто читал эту ветку, и мне пришла в голову идея, если вы являетесь пользователем Shopify и хотите это сделать, это почти то же самое, что указано. Но вместо

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

Вы бы положили

> http://storedomain.com/target

Например, я настраиваю страницу отказа от ответственности со ссылками, ведущими на подписку на информационный бюллетень и блоки покупок на моей домашней странице, поэтому я вставляю https://mystore-classifier.com/#shopify-section-1528945200235свою гиперссылку. Обратите внимание, что -classifier предназначен для моего внутреннего использования и не относится к вам. Это просто для того, чтобы я мог отслеживать свои магазины. Если вы хотите разместить ссылку не на свою домашнюю страницу, вы должны указать

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

Надеюсь, кто-то нашел это полезным, если что-то не так с моим объяснением, дайте мне знать, так как я не программист HTML, мой язык - C #!


3

Предстоящая функция Chrome «Прокрутить до текста» - это именно то, что вы ищете ....

https://github.com/bokand/ScrollToTextFragment

Вы в основном добавляете #targetText=в конец URL-адреса, и браузер прокручивает целевой текст и выделяет его после загрузки страницы.

Он находится в той версии Chrome, которая запущена на моем столе, но в настоящее время его необходимо включить вручную. Предположительно, скоро он будет включен по умолчанию в производственных сборках Chrome, и другие браузеры последуют за ним, так что хорошо, чтобы начать добавлять свои ссылки сейчас, и тогда он начнет работать.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.