Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Скрип не копирует url некоторых картинок (https://javascript.ru/forum/css-html/77907-skrip-ne-kopiruet-url-nekotorykh-kartinok.html)

selevo 01.07.2019 11:17

Скрип не копирует url некоторых картинок
 
Вложений: 1
Скрипт:
// ==UserScript==
// @name         js_ все сйты ссылка в буфер по CTRL+ПКМ
// @namespace    [url]http://tampermonkey.net/[/url]
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        [url]http://*/*[/url]
// @match        [url]https://*/*[/url]
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
document.body.oncontextmenu = function(e)
{

if (e.target.tagName == 'IMG' && e.ctrlKey)
    {
		e.preventDefault();
      navigator.clipboard.writeText(e.target.src);
        console.log("IMG URL: "+e.target.src);
        return;
	}
 var that = e.target.closest('a');
      if (that && e.ctrlKey)
      {
        e.preventDefault();
        navigator.clipboard.writeText(that.href);
        console.log("\n"+
                   "URL ссылки:" +that.href)
      }
	}


/*     document.addEventListener('contextmenu',e =>
 {
            if (e.target.tagName == 'IMG' && e.ctrlKey)
          {
		e.preventDefault();
      navigator.clipboard.writeText(e.target.src);
        console.log("\n"+
                   "IMG URL: "+e.target.src);
        return;
          }


    let that = e.target.closest('a');
      if(e.target.closest('a') && e.ctrlKey)
      {
        e.preventDefault();
        navigator.clipboard.writeText(that.href);
        console.log("\n"+
                    "URL ссылки:" +that.href);


      }

}); */

    // Your code here...
})();


Вот такую ссылку берет
<div class="styles-root-12rcO"><img class="styles-img-2OLWK" itemprop="image" src="//09.img.avito.st/208x156/5735477009.jpg" alt="Корпус CaseLabs Merlin SM8 чёрного цвета"></div>


А эту нет. Как решить ?
<div class="attachcontent">
			<a href="./download/file.php?id=37007&amp;mode=view"><img src="./download/file.php?id=37007&amp;t=1" alt="im765.jpg"></a><br>
			<span class="gensmall">im765.jpg [ 227.15 Кб | Просмотров: 774 ]</span>

http://forum.easyelectronics.ru/view...24580&start=75

ksa 01.07.2019 12:18

Цитата:

Сообщение от selevo
Как решить ?

Для начала сделать полный тестовый пример, а не показать огрызки...

selevo 01.07.2019 12:56

))
да там вроде больше ниче важного нет влияющего на результат
вставил весь скрипт

ksa 02.07.2019 07:51

Цитата:

Сообщение от selevo
вставил весь скрипт

У тебя странное понятие тестового примера... :-?

Тестовый пример это файл с минимальной разметкой и кодом, позволяющий иллюстрировать проблему.
Благо на этом форуме валом таких!

А ты как кидал куски, так и продолжаешь. Только кусок теперь больше...

Malleys 02.07.2019 10:21

Цитата:

Сообщение от selevo
А эту нет. Как решить ?

Копирование текста в буфер обмена доступно только в безопасном контексте. Также вы можете попробовать опасное копирование текста.
if(isSecureContext) {
    navigator.clipboard.writeText(url);
} else {
    // ОПАСНОЕ КОПИРОВАНИЕ ТЕКСТА
    const input = document.createElement("input");
    document.body.appendChild(input);
    input.value = url;
    input.style.cssText = `
        position: fixed;
        top: 0;
        opacity: 0;
    `;
    input.focus();
    input.select();
    const result = document.execCommand("copy");
    if(result === "unsuccessful") {
        console.error("Failed to copy text.");
    }
    document.body.removeChild(input);
}


Я вижу, что вы используете скрипт для GM или TM. Вы можете использовать тогда метод GM.setClipboard.

// ==UserScript==
// @name         Копировать адрес картинки/ссылки Cmd+RightClick
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        http://*/*
// @match        https://*/*
// @grant        GM.setClipboard
// ==/UserScript==

addEventListener("contextmenu", event => {
    const { target, metaKey, ctrlKey } = event;

    if(!metaKey && !ctrlKey) return;
    let url;

    if(target.nodeName === "IMG") {
        url = target.src;
    } else {
        const link = target.closest("a");
        if(link) url = link.href;
    }

    if(url == null) return;

    event.preventDefault();
    GM.setClipboard(url);
    console.log(`URL: ${url}`);
});


Цитата:

Сообщение от ksa
Тестовый пример это файл с минимальной разметкой и кодом, позволяющий иллюстрировать проблему.

А это не иллюстрирует? Или ваше иллюстрировать имеет некий тайный смысл?

ksa 02.07.2019 15:40

Цитата:

Сообщение от Malleys
А это не иллюстрирует?

Ты спец - тебе видней...

j0hnik 03.07.2019 08:22

selevo,
Прикол в том что e.target не всегда будет img даже если вы кликаете по картинке и точно не промахиваетесь. поверх может быть какой нибудь овер, или img может быть фоном.

selevo 09.07.2019 09:22

как по-свободнее будет, проверю.
Спасибо.
Malleys,


Часовой пояс GMT +3, время: 11:26.