Greasemonkey - изображение не отображается - PullRequest
3 голосов
/ 09 марта 2011

В Greasemonkey я пытаюсь использовать локальную копию изображения, найденного в Интернете.Изображение временно сохраняется в C: \ temp.

Это не работает:

var b = document.body;
b.style.background = '#ccc url("file:///C:/temp/bg.jpg") repeat-x top left';

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

  setTimeout(function(){element.className = element.className;},500);

Если я буду использовать путь к исходному URL-адресу http (http://somedomain/bg.jpg), это будет работать, но я пытаюсь избежать этого. Я не уверен, почему это таквозникла проблема при рендеринге локальных изображений.

Ответы [ 5 ]

8 голосов
/ 10 марта 2011

Greasemonkey предоставляет средства для этого и без компрометации безопасности вашего ПК (Пожалуйста, включите эту проверку безопасности, есть миллионы веб-сайтов, ожидающих использования таких дыр).

Вот один из способов сделать это:

  1. Для достижения наилучших результатов используйте менеджер пользовательских сценариев Greasemonkey ( Ctrl Shift A ), чтобы удалить старую версию сценария, если есть.

  2. Скопируйте желаемое изображение в любую папку, в которой находится ваш скрипт источник , не установленный скрипт в директории профиля .

    Например, если ваш сценарий source находится в C:\myScripts\, скопируйте bg.jpg в эту папку. Не используйте временную папку для вашего исходного сценария.

  3. Добавьте эти строки в раздел метаданных скрипта:

    // @resource MyBG_Image bg.jpg
    // @grant    GM_getResourceURL
    
  4. Тогда вы можете использовать этот код в вашем скрипте:

    var b = document.body;
    b.style.background = '#ccc url("' + GM_getResourceURL ("MyBG_Image") + '") repeat-x top left';
    
  5. Теперь установите скрипт, открыв файл с помощью Firefox. Например, в FF используйте меню Файл -> Открыть файл (Или Ctrl O ) чтобы открыть C:\myScripts\MyScript.user.js
    Greasemonkey предложит (пере) установить скрипт, после чего будет работать локальный файл bg.

2 голосов
/ 09 марта 2011

Это потому, что вы не можете добавить ссылку на локальный файл (file: //) из другого домена, отличного от локального.

Сообщение об ошибке безопасности отображается в консоли ошибок. (на тот случай, если вы раньше его не видели)

Пожалуйста, прочитайте Политика того же происхождения для файла: URI для подробностей.

1 голос
/ 27 октября 2014

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

// @grant       GM_getResourceURL
1 голос
/ 28 апреля 2012

Брок Адамс абсолютно прав. Сценарий должен быть (пере) установлен, как он описывает.

добавление этого к метаданным:

    // @resource MyTest_Image animated_gif_test.gif

и этот сценарий заставляет ГМ использовать изображение на машинном аппарате

    //images[x].src  = GM_getResourceURL ("MyTest_Image");

Подробнее об этом методе здесь: http://wiki.greasespot.net/GM_getResourceURL

    // ==UserScript==
    // @resource logo http://www.example.com/logo.png
    // ==/UserScript==

    var img = document.createElement('img');
    img.src = GM_getResourceURL("logo");
    document.body.appendChild(img);
0 голосов
/ 09 марта 2011

От: http://www -archive.mozilla.org / Releases / Mozilla1.7.12 / known-Issues.html

По соображениям безопасностиMozilla не позволяет веб-контенту ссылаться на локальные файлы.Ошибка типа: Ошибка безопасности: содержимое по URL может не загружаться или ссылка на файл: /// что-то появится в консоли javascript.Если вам нужно перейти по ссылкам на локальные пути, рекомендуется перетащить ссылку на панель адреса, а затем поместить ее на веб-странице.Если вам действительно не нравится проверка безопасности, и вы готовы рискнуть всеми файлами в вашей системе и получить доступ к вашей системе, вы можете добавить следующую строку в user.js в вашем личном каталоге профиля .user_pref ("security.checkloaduri", false);(Ошибка 84128 )

...