受け取った回答に満足できなかったので ( Andreas Köberle のアドバイスには感謝していますが)、自分でこれに取り組むことにしました。
オンデマンドで実行でき、外部ソースを持つ html 要素を識別できる関数を作成しました。このようにして、javascript エラーを報告するたびにこれを実行して、環境に関する詳細情報を取得できます。
コード
jQueryに依存します(申し訳ありませんが、要素の選択は非常に簡単でした)およびparseUri()
(この回答の下部にコピーされています)
/**
* Identifies elements with `src` or `href` attributes with a URI pointing to
* a hostname other than the given hostname. Defaults to the current hostname.
* Excludes <a> links.
*
* @param string myHostname The hostname of allowed resources.
* @return array An array of `ELEMENT: src` strings for external resources.
*/
function getExternalSources(myHostname)
{
var s, r = new Array();
if(typeof myHostname == 'undefined')
{
myHostname = location.hostname;
}
$('[src], [href]:not(a)').each(function(){
s = (typeof this.src == 'undefined' ? this.href : this.src);
if(parseUri(s).hostname.search(myHostname) == -1)
{
r.push(this.tagName.toUpperCase() + ': ' + s);
}
});
return r;
}
使用法
var s = getExternalSources('mydomain.com');
for(var i = 0; i < s.length; i++)
{
console.log(s[i]);
}
// Can also do the following, defaults to hostname of the window:
var s = getExternalSources();
検索にはサブドメインが含まれるため、上記の例ではソースがwww.mydomain.com
orの要素img.mydomain.com
が許可されます。
@import
これは、CSSルール(またはその件については を含む CSSルール)の外部ソースを検出しないことに注意してくださいurl()
。誰かがそれを行うことができるコードに貢献したい場合は、私はあなたの答えに賛成票を投じて受け入れます。
以下は、 https://gist.github.com/1847816parseUri()
から取得した(少し変更した)のコードです。
(function(w, d){
var a,
k = 'protocol hostname host pathname port search hash href'.split(' ');
w.parseUri = function(url){
a || (a = d.createElement('a'));
a.href = url;
for (var r = {}, i = 0; i<8; i++)
{
r[k[i]] = a[k[i]];
}
r.toString = function(){return a.href;};
r.requestUri = r.pathname + r.search;
return r;
};
})(window, document);