簡體   English   中英

如何知道哪個網頁正在調用外部javascript腳本

[英]how to know which web page is invoking an external javascript script

許多網頁都可以使用外部javascript。 如何知道哪個網頁正在使用外部js腳本? 例如,我有一個javascript腳本s.js。 s.js函數是否可以檢查正在使用s.js的頁面?

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)。 然后,腳本從Google服務器請求一個1x1像素,並將網頁的URL編碼為圖片的地址。 因此,對於stackoverflow.com,像素網址為:

http://pixel.quantserve.com/pixel;r=3547206;fpan=0;fpa=P0-82955756-1264139666260;ns=0;url=http%3A%2F%2Fstackoverflow.com ....因為我真的不知道該地址透露了我的身分,所以沒有透露它是我的瀏覽器發送的地址:))。

如您所見,網站的網址是圖片網址的一部分。 在服務器端,您需要一個處理程序來提供此圖像,並通過從圖像URL中提取頁面地址來記錄頁面地址。

之所以使用圖片而不是AJAX請求,是因為AJAX請求受瀏覽器XSS限制。 基本上,瀏覽器不會對不是提供該頁面的網站的網站進行AJAX調用。 這意味着www.otherpeopleswebsite.com上的頁面不允許對www.mywebsite.com進行AJAX調用。 圖片(或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。 根據您的服務器技術,有很多方法可以實現它。

JavaScript必須包含在要執行的頁面中。 出於測試目的 ,您可以使用以下方法獲取頁面:

document.write(location.href);

在生產環境中,將位置存儲在變量中。

var loc = location.href;

該腳本可以引用document.location ,它將始終圍繞主頁的URL構建。 具體來說, document.location.href將是URL。

從而:

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

管他呢。

在您的javascript文件中,您需要對腳本進行AJAX調用,該腳本將記錄文件名。 日志可以是數據庫或平面文件。 您需要將location.href (或適合您所要查找的location屬性)作為日志記錄腳本的參數發送。

嵌入Javascript文件中,您需要將該函數附加到Windows onload或domready事件上,以確保執行AJAX調用。 確保不要覆蓋onload / domready事件,而只是將其添加到事件堆棧中。 如果您不知道如何執行此操作,則需要查找如何添加/附加事件。

注意:您可以使用SOAP或REST來代替日志記錄腳本,而不必使用日志記錄腳本。

當腳本在頁面上運行時,您可以創建一個警報(彈出菜單)以讓您知道它在當前頁面上:

alert('Im in your page being your s.js file');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM