2017-04-05 57 views
0

進入JavaScript時的在瀏覽器控制檯窗口:的Javascript需要在瀏覽器控制檯

1)

下面的代碼工作:

alert('hi'); 

2)

以下不:

(function() { 
var scr = document.createElement('script'); 
scr.src = 'http://www.myrandomwebsite.com/myjs.js'; 
document.head.appendChild(scr); 
myfunc(); 
})() 

其中myjs.js文件夾包含:

var myfunc = function(){alert('hi')}; 

解釋2) 的代碼在這種情況下輸入的代碼段確實會導致下面的代碼來顯示在報頭的末尾標籤中的源代碼:

<script src="http://www.myrandomwebsite.com/myjs.js"></script> 

但功能MYFUNC沒有被認可,因爲我得到了以下錯誤消息:

VM132:5 Uncaught ReferenceError: myfunc is not defined

這使我相信,作爲一種安全措施,瀏覽器不運行在頁面加載後編輯JavaScript代碼, 或類似的規定。

問題:有沒有這方面的解決方法?它是否是在大多數編程語言中像require('...');一樣的函數。 但它不能是通過安裝任何特殊的擴展,只是在飛行中的工作。

我走過很多地方,在不同的計算機上工作,並希望能夠使用我的一些代碼,而不需要隨身攜帶USB。

________________________ UPDATE ________________________

解決方案@Jared史密斯提出了完美。現在有一個不起作用的例子(我明白爲什麼)。當一個網站有一個內容安全,政策是不允許從其它網址或任何連接加載腳本加載:

例如:

Content-Security-Policy: script-src 'self' https://apis.google.com 
Content-Security-Policy: connect-src 'self' https://apis.google.com 

這非常有意義。我的情況是我有我自己的代碼,但我希望能夠將此代碼存儲在另一個站點上,並在旅行中或在其他計算機上使用它,而無需從USB中提取它們。

現在我明白網站的白名單出於安全原因加載了哪些源腳本,但我不明白爲什麼在開發者控制檯完成時沒有例外。CSP主要用於防止XSS攻擊等,但控制檯中的某人故意使用代碼和測試功能。

問題:控制檯中是否有某些功能可以允許從其他站點加載腳本?我一直在擺弄源腳本代碼段,但一直未能找到選項。或者可能還有其他一些無關的工作?

+2

您需要等待腳本標記的'onload'事件。 –

+0

@JaredSmith怎麼樣?如果我進入頁面並完全加載,然後打開檢查元素,請轉到控制檯,即我想要執行代碼時。一切都已經加載,但仍然發生錯誤。 – Webeng

+0

'src.onload = function(){myfunc(); };'。瀏覽器必須獲取腳本src,這是一個異步操作,您必須使用回調。 –

回答

1

的解釋有一點是爲了在這裏。

當您動態添加帶有src的腳本標記時,瀏覽器將觸發對JavaScript文件的請求。但是這個操作與頁面上最初的常規標籤不同,它是異步,它不會阻止。這意味着下一行代碼(在你的情況下調用myfunc)立即執行,而文件仍然被抓取。所以如果你想推遲代碼執行,直到腳本被提取,解析和執行之後,你需要註冊一個回調函數。我們可以通過監聽腳本元素的load事件來做到這一點。有兩種方法:

​​

和分配功能的腳本元素onload財產。唯一真正的區別是addEventListener的方式允許你附加多個監聽器,其中scr.onload只能有一個值(就像任何其他對象屬性一樣)。

+0

美麗的解釋 – Webeng

+0

海伊@Jared史密斯,我想跟隨你有趣的討論。代碼一直很好,但我發現了1個具體的情況,可能有點棘手的問題需要解決。我用新的信息更新了我的原始郵政,你能檢查出來並告訴我你的想法嗎? – Webeng

+0

@Webeng在這方面沒有什麼特別的控制檯。請注意,外部服務器需要啓用CORS才能使用跨源數據源。 –

1

這個工程:

var scr = document.createElement('script'); 
scr.text = 'function sayHi() { alert("hi")}'; 
document.head.appendChild(scr); 
sayHi() 

... aaaaaand這個工程:

var scr = document.createElement('script'); 
scr.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js'; 
scr.onload = function() { 
    $(function(){ 
    $('body').css({backgroundColor: 'red'}); 
    }); 
} 
document.head.appendChild(scr); 
+1

OP是專門詢問有關使用url源的內容,而不是內聯腳本。 –

+0

謝謝你的迴應約翰!但我想要的是使用另一個網站上的代碼。用你的代碼片段,我將不得不記住所有的代碼並重寫它。我想擁有自己的網站及其上的代碼,然後我很容易以這種方式訪問​​。 – Webeng

+0

np我更新,以及 –

相關問題