Используйте javascript для имитации события щелчка в javascript: href

#javascript #jquery #href

#javascript #jquery #href

Вопрос:

Я использую стороннюю систему, которая позволяет нам добавлять пользовательский javascript, и мне нужен способ поиска пользовательского URL, а затем система выводит логин пользователя, который вызывается нажатием на href=»javascript:;»

 < a class="nav-link" href="javascript:;"> < b>sign in</b></ a>
 

Обратите внимание, что class=»nav-link» НЕ является уникальным

У меня нет проблем с поиском пользовательского URL-адреса и выполнением различных действий, но я не знаю, как выполнить имитацию события щелчка по этому javascript href, чтобы он отображал логин пользователя.

Например, приземление на: «https://our.site.com/webstoreNew/services/guestprofile » Пользовательская часть URL-адреса — это «guestprofile», и она не перенаправляется основной системой и остается

Я пробовал следующее:

 <script>
const guest_url = "https://our.site.com/webstoreNew/services/guestprofile";
let current_url = window.location.href;


if(current_url === guest_url) {

$('href="javascript:;"')[0].click();
}

</script>
 

другие вещи, которые пытались:

 $(javascript:;)[0].click();
$(href="javascript:;")[0].click();
 

Я чувствую, что это, вероятно, проблема синтаксиса, но нужна чья-то помощь

Комментарии:

1. Является ли HTML-часть вашего вопроса прямой копией фактического кода? Если это так, элемент привязки имеет неправильную форму HTML, поскольку теги начинаются с «<«, за которым сразу следует имя тега, без пробелов между ними. То же самое для закрывающего тега, он начинается с «</», за которым сразу следует имя тега.

2. Извините.. я вставил пробелы, но в реальном коде нет пробелов. <a class=»nav-link» href=»javascript:;»> <b>войдите</b></a>

Ответ №1:

РЕДАКТИРОВАТЬ: обновлено с добавлением большего количества вашего кода и удален код, который будет работать в сниппете.

Проверьте мой фрагмент ниже, просто создайте функцию и вызовите ее, как в моем примере ниже fakeClick(); .

Если вы хотите настроить таргетинг на упомянутую вами ссылку, вы можете использовать querySelector следующим образом:

 const href = document.querySelector('[href="javascript:;"]');
 

Приведенный ниже фрагмент не вызовет щелчок, потому что мы используем window.location.href; , который не поддерживается в фрагментах stackoverflow. При этом, если вы запустите это в своем проекте, оно будет функционировать должным образом.

 //your guest url
const guest_url = "https://our.site.com/webstoreNew/services/guestprofile";

let current_url = window.location.href;

//this is the a element where we trigger the click
const href = document.querySelector('[href="javascript:;"]');

console.log(href);


//this is the function
//if both are equal it will trigger a click on atag
function fakeClick() {
if(current_url === guest_url) {

href.click();
}
}

//here we are calling the function so it will run immediately
fakeClick(); 
 <a class="nav-link" href="javascript:;"><b>sign in</b></a> 

Кроме того, как упоминал @Oskar Grosser, если вы хотите использовать код из вашего примера, вам просто нужно изменить неправильный вызов из этого:

 $('href="javascript:;"')[0].click();
}
 

Для этого:

 $('[href="javascript:;"]')[0].click();
}
 

Как вы можете видеть, скорректированный Jquery соответствует вызову querySelector и должен функционировать таким же образом.

Комментарии:

1. Я думаю, что проблема здесь в элементе «a». В моем случае такого элемента нет, и это просто ссылка href=»javascript:;». Как показано здесь < a class=»nav-link» href=»javascript:;»> < b>войдите</b></ a>

2. developer.mozilla.org/en-US/docs/Web/API/Document/querySelector — Вы можете использовать querySelector для поиска href. Это мощный метод, который может помочь вам ссылаться на что угодно на вашей странице. — Просто замените вызов запроса atag на что-то, что может ссылаться на ваш href.

3. Я обновил свой ответ, чтобы показать, как вы можете настроить таргетинг на этот href.

Ответ №2:

С помощью jQuery вы запрашиваете один или несколько элементов, используя селекторы CSS.

Поскольку вы хотите запросить точный атрибут, вы должны отформатировать строку запроса следующим образом:
[attributeName="value"]

Еще одно замечание: то, что вы запрашиваете, должно быть в строке. При других ваших попытках браузер пытается разрешить javascript и href , как если бы это были переменные, отсюда и ошибки.

Сам click() по себе вызов является правильным, что приведет к возникновению события щелчка.

 // Setup for feedback; ignore
$("a").click(() => console.log("'a' was clicked!"));

// Correct query
$('[href="javascript:;"]').click(); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="javascript:;">A link</a> 

Комментарии:

1. Это здорово, но по какой-то причине система говорит следующее: Uncaught TypeError: не удается прочитать свойство ‘click’ из null в guestprofile:42 Я несколько раз менял URL-адрес, чтобы узнать, проблема ли это, но нет.