# Prevent downloading of posted images

**URL:** https://meta.discourse.org/t/prevent-downloading-of-posted-images/99689
**Category:** Support
**Created:** [16.Октябрь.2018 22:50:34 UTC](https://meta.discourse.org/t/prevent-downloading-of-posted-images/99689 "2018-10-16T22:50:34Z")
**Posts on this page:** 10
**Page:** 2

<div class="post-metadata">

### Author: ![ariznaf](https://avatars.discourse-cdn.com/v4/letter/a/ecccb3/32.png) [@ariznaf](https://meta.discourse.org/u/ariznaf)
#### Post date: [14.Октябрь.2019 12:38:19 UTC](https://meta.discourse.org/t/prevent-downloading-of-posted-images/99689/27 "2019-10-14T12:38:19Z")

</div>

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

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [14.Октябрь.2019 22:10:15 UTC](https://meta.discourse.org/t/prevent-downloading-of-posted-images/99689/28 "2019-10-14T22:10:15Z")

</div>

> [@ariznaf](#):
>
> Мы просто предпочитаем, чтобы скачивание изображений не было очевидным,

Технически это реализуемо в компоненте темы, разработка, вероятно, не потребует больших затрат — возможно, несколько сотен долларов. Создайте тему в канале #Marketplace.

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [20.Июнь.2023 17:04:55 UTC](https://meta.discourse.org/t/prevent-downloading-of-posted-images/99689/29 "2023-06-20T17:04:55Z")

</div>



---

<div class="post-metadata">

### Author: ![ariznaf](https://avatars.discourse-cdn.com/v4/letter/a/ecccb3/32.png) [@ariznaf](https://meta.discourse.org/u/ariznaf)
#### Post date: [23.Январь.2024 16:10:17 UTC](https://meta.discourse.org/t/prevent-downloading-of-posted-images/99689/30 "2024-01-23T16:10:17Z")

</div>

До сих пор мы пытались затруднить скачивание изображений, предотвращая появление контекстного меню, используя скрипт, предоставленный выше пользователем @awesomerobot:

```plaintext
<script type="text/discourse-plugin" version="0.8">
const TopicRoute = require("discourse/routes/topic").default;
TopicRoute.reopen({ activate: function() { this._super(); Em.run.next(function() { $('body').on('contextmenu', '.cooked img, .mfp-img', function(e){ return false; }); }); } }); 
</script>

```

Мы внесли изменения в тему Discourse и добавили этот скрипт в заголовок каждой страницы.

Однако после последнего обновления до версии 3.2.0.beta5-dev (67244a2318) при попытке открыть тему возникали ошибки в Discourse, и нам пришлось удалить скрипт.

Похоже, что в Discourse произошли изменения, которые препятствуют его работе.

 ![imagen](https://global.discourse-cdn.com/meta/original/4X/6/1/9/61988f7cb1aa72bb9e8137f74aefde185712fc22.png)

---

<div class="post-metadata">

### Author: ![davidkingham](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/davidkingham/32/119528_2.png) [@davidkingham](https://meta.discourse.org/u/davidkingham)
#### Post date: [23.Январь.2024 16:15:59 UTC](https://meta.discourse.org/t/prevent-downloading-of-posted-images/99689/31 "2024-01-23T16:15:59Z")

</div>

Вот обновлённая версия, которую мне удалось исправить!

```plaintext
<script type="text/discourse-plugin" version="0.8">
  api.onPageChange((url, title) => {
    $("img").on("contextmenu", function(e) {
      e.preventDefault();
    });
  });
</script>

<script type="text/discourse-plugin" version="0.8">
  api.onPageChange((url, title) => {
    $("body").on("contextmenu", ".cooked img, .mfp-img", function(e) {
      e.preventDefault();
    });
  });
</script>

```

---

<div class="post-metadata">

### Author: ![awesomerobot](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/awesomerobot/32/142900_2.png) [@awesomerobot](https://meta.discourse.org/u/awesomerobot)
#### Post date: [23.Январь.2024 16:16:52 UTC](https://meta.discourse.org/t/prevent-downloading-of-posted-images/99689/32 "2024-01-23T16:16:52Z")

</div>

Это ожидаемо из-за обновлений Ember: данный фрагмент кода уже довольно устарел и потребует переписывания.

---

<div class="post-metadata">

### Author: ![ariznaf](https://avatars.discourse-cdn.com/v4/letter/a/ecccb3/32.png) [@ariznaf](https://meta.discourse.org/u/ariznaf)
#### Post date: [23.Январь.2024 16:23:27 UTC](https://meta.discourse.org/t/prevent-downloading-of-posted-images/99689/33 "2024-01-23T16:23:27Z")

</div>

Спасибо, я попробую новый скрипт.

Кажется, всё работает: теперь контекстное меню не появляется при использовании лайтбокса.

Вы всё ещё можете скачать изображение из встроенных миниатюр в посте.

---

<div class="post-metadata">

### Author: ![ariznaf](https://avatars.discourse-cdn.com/v4/letter/a/ecccb3/32.png) [@ariznaf](https://meta.discourse.org/u/ariznaf)
#### Post date: [24.Январь.2024 10:36:12 UTC](https://meta.discourse.org/t/prevent-downloading-of-posted-images/99689/34 "2024-01-24T10:36:12Z")

</div>

Привет, @davidkingham

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

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

Но это не работает: я всё ещё могу открыть вторичное меню и открыть полное изображение в отдельном окне.

Я пытался добавить это в CSS:

```plaintext
img {
    pointer-events: none;
}

```

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

Что не так?

Было бы здорово скрыть ссылки для скачивания под лайтбоксом.

Ранее у меня в CSS был следующий блок:

```plaintext
.image-source-link
{
    display: none;
}

```

Но теперь это тоже, кажется, не работает, так как ссылки _download_ и _original image_ всё равно отображаются под изображением в лайтбоксе.

ОБНОВЛЕНИЕ:

Я модифицировал второй скрипт, добавив туда .lightbox-wrapper, и теперь, кажется, всё работает: контекстное меню не появляется при щелчке правой кнопкой мыши по изображению в посте, а лайтбокс корректно открывается при обычном клике по изображению.

```plaintext
<script type="text/discourse-plugin" version="0.8">
  api.onPageChange((url, title) => {
    $("body").on("contextmenu", ".cooked img, .mfp-img, .lightbox-wrapper", function(e) {
      e.preventDefault();
    });
  });
</script>

```

Стоит ли мне удалить первый скрипт, который пытается сделать то же самое для общего объекта img?

Если я заменю CSS для .img-source-link на .mfp-title, это работает: ссылки для скачивания больше не видны, но скрывается и заголовок. Я не понимаю, почему скрытие только ссылок не работает, а скрытие всей панели заголовка — работает.

```plaintext
.mfp-title
{
    display: none;
}

```

---

<div class="post-metadata">

### Author: ![davidkingham](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/davidkingham/32/119528_2.png) [@davidkingham](https://meta.discourse.org/u/davidkingham)
#### Post date: [24.Январь.2024 14:46:14 UTC](https://meta.discourse.org/t/prevent-downloading-of-posted-images/99689/35 "2024-01-24T14:46:14Z")

</div>

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

```plaintext
.image-source-link {
    display: none !important;
}

```

Это оставляет после себя лишние · ·, но это единственный способ, которым я мог скрыть только ссылку на скачивание (и ссылку «Посмотреть в полном размере»).

---

<div class="post-metadata">

### Author: ![ariznaf](https://avatars.discourse-cdn.com/v4/letter/a/ecccb3/32.png) [@ariznaf](https://meta.discourse.org/u/ariznaf)
#### Post date: [24.Январь.2024 14:59:18 UTC](https://meta.discourse.org/t/prevent-downloading-of-posted-images/99689/36 "2024-01-24T14:59:18Z")

</div>

Спасибо большое.  
Я не знаю, что такое !important, но это работает, а завершающие точки, похоже, не так важны 😉

Вот как теперь выглядят CSS и скрипты, и мы получили желаемое поведение: ни одно изображение на сайте нельзя скачать через правую кнопку мыши, а ссылки для скачивания в лайтбоксе скрыты.  
Спасибо за ваши рекомендации.

CSS

```plaintext
.image-source-link
{
    display: none !important;
}

```

Скрипты в заголовке:

```plaintext
<script type="text/discourse-plugin" version="0.8">
  api.onPageChange((url, title) => {
    $("img").on("contextmenu", function(e) {
      e.preventDefault();
    });
  });
</script>
<script type="text/discourse-plugin" version="0.8">
  api.onPageChange((url, title) => {
    $("body").on("contextmenu", ".cooked img, .mfp-figure, .lightbox-wrapper", function(e) {
      e.preventDefault();
    });
  });
</script>

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

Второй работает для изображений в постах и в лайтбоксе.

```

[Предыдущая страница](https://meta.discourse.org/t/prevent-downloading-of-posted-images/99689.md?page=1)
