Как узнать, какая веб-страница вызывает внешний сценарий JavaScript - PullRequest
0 голосов
/ 14 июля 2010

Внешний javascript может использоваться многими веб-страницами. Как узнать, какая веб-страница использует внешний js-скрипт? Например, у меня есть сценарий JavaScript s.js. Возможно ли, что функция s.js может проверить, какая страница использует s.js?

Ответы [ 5 ]

6 голосов
/ 14 июля 2010

location объект содержит всю информацию об URL, на котором в данный момент находится браузер.

    hash        Returns the anchor portion of a URL
    host        Returns the hostname and port of a URL
    hostname    Returns the hostname of a URL
    href        Returns the entire URL
    pathname    Returns the path name of a URL
    port        Returns the port number the server uses for a URL
    protocol    Returns the protocol of a URL
    search      Returns the query portion of a URL

РЕДАКТИРОВАТЬ Теперь, чтобы ответить на вопрос, который вы действительно хотели задать, и как отследить, какие страницы используют ваш файл javascript. Я думаю (и я не реализовывал нечто подобное раньше), чтобы использовать ту же стратегию, что и сайты аналитики.

Кажется, что все они используют разновидность пикселя отслеживания, когда браузер загружает файл сценария (например, QuantServer - http://edge.quantserve.com/quant.js).. Затем сценарий запрашивает 1x1 пиксель с сервера Google и кодирует URL-адрес веб-страницы в адрес изображения. Таким образом, для stackoverflow.com, URL-адрес пикселя:

http://pixel.quantserve.com/pixel;r=3547206;fpan=0;fpa=P0-82955756-1264139666260;ns=0;url=http%3A%2F%2Fstackoverflow.com.... (Я не раскрыл адрес, так как мой браузер отправляет его, так как я не знаю, что он обо мне сообщает :)).

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

Причина, по которой это изображение, а не запрос AJAX, заключается в том, что запросы AJAX подчиняются ограничениям XSS браузера. По сути, браузер не будет выполнять AJAX-вызов на веб-сайте, который не обслуживает страницу. Это означает, что на странице www.otherpeopleswebsite.com запрещено совершать вызовы AJAX на www.mywebsite.com. Нет таких ограничений для изображений (или файлов JavaScript в этом отношении).

Итак, простая система для реализации чего-то подобного могла бы сделать что-то для этого:

//s.js
var oldLoad = window.onload;
window.onload = function(){
  if (oldLoad)
    oldLoad();
    var img = document.createElement('img');
    img.setAttribute('src', 'www.mysite.com/pixel?url=' + window.location.href);
}

На стороне сервера обработчик pixel будет обрабатывать изображение размером 1x1px, устанавливать для типа содержимого соответствующее значение (например, image/gif), извлекать строку запроса и регистрировать URL-адрес. В зависимости от вашей серверной технологии, есть много способов реализовать это.

1 голос
/ 14 июля 2010

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

alert('Im in your page being your s.js file');
1 голос
/ 14 июля 2010

Внутри вашего javascript-файла вам нужен AJAX-вызов скрипта, который будет регистрировать имя файла.Журнал может быть в базе данных или плоский файл.Вам необходимо отправить location.href (или свойство location, которое соответствует тому, что вы ищете) в качестве параметра для вашего сценария ведения журнала.

Встроенный в файл Javascript, к которому вы хотите прикрепитьфункция к событиям onload или domready, чтобы гарантировать, что вызов AJAX выполнен.Убедитесь, что вы не переопределяете событие onload / domready, а просто добавляете его в стек событий.Вам нужно будет посмотреть, как добавить / прикрепить событие, если вы не знаете, как это сделать.

Примечание: вместо сценария регистрации вы можете использовать SOAP или REST для ведения журнала.

1 голос
/ 14 июля 2010

Скрипт может ссылаться на document.location, который всегда будет построен вокруг URL главной страницы.В частности, document.location.href будет URL.

Таким образом:

if (document.location.href === 'http://www.cnn.com') {
  // being imported by CNN ...
}

или что угодно.

1 голос
/ 14 июля 2010

JavaScript должен быть включен в страницу для выполнения. Только для тестирования , вы можете получить страницу, используя это:

document.write(location.href);

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

var loc = location.href;
...