2016-08-04 9 views
6

Browser ist Chrome. 1.js: 4 Uncaught Typeerror: kann nicht lesen Eigenschaft 'src' von document.currentScript sollte aberdocument.currentScript ist null

index.html

<link href="css/main.css" rel="stylesheet" /> 
<script src="1.js"></script> 
<style> 

1.js

setInterval(function(){ 


var fullUrl = document.currentScript.src; 

console.log(fullUrl) 
},2000) 

Fehler unterstützt werden Null

Antwort

12

document.currentScript nur returns the script that is currently being processed. Während Rückrufen und Ereignissen wurde das Skript verarbeitet und document.currentScript wird null sein. Dies ist beabsichtigt, da das Beibehalten des Verweises verhindern würde, dass das Skript als Garbage Collection erfasst wird, wenn es aus dem DOM entfernt wird und alle anderen Referenzen entfernt werden.

Wenn Sie außerhalb von irgendwelchen Rückrufe einen Verweis auf das Skript zu halten, können Sie:

var thisScript = document.currentScript; 

setInterval(() => console.log(thisScript.src), 2000); 
+1

danke, gute antwort. – zloctb

+1

Seien Sie einfach sicher, dies in einer Schließung zu tun, um 'thisScript' zu isolieren. – Campbeln

0

Sie haben the documentation nicht gelesen, das sagt:

It's important to note that this will not reference the <script> element if the code in the script is being called as a callback or event handler; it will only reference the element while it's initially being processed.

+0

> '' es ist genau dort – Brian

+1

@Brian: Schau noch einmal. –

2

Sie die Referenz der außerhalb des Callback-document.currentScript halten

var currentScript = document.currentScript; 

setInterval(function(){ 
    var fullUrl = currentScript.src; 
    console.log(fullUrl) 
},2000);