2011-10-10 124 views
18

這聽起來像一個瑣事問題,但我真的需要知道。直接從瀏覽器執行JavaScript文件

如果您將HTML文件的URL放入瀏覽器的位置欄中,它將呈現該HTML。這是瀏覽器的全部目的。

如果你給它一個JPG,SWF,甚至PDF,它將爲這些數據類型做正確的事情。

但是,如果你給它一個JavaScript文件的URL,它會顯示該文件的文本。我想要的是直接執行該文件。

現在,我知道如果您使用javascript:協議,它將執行URL的文本,但那不是我所需要的。

我可以將URL指向一個HTML文件,該文件由單個<script>標記組成,該標記又指向JavaScript文件,但由於我自己的隱匿原因,我無法做到這一點。

如果http://example.com/file.js文件完全的

alert("it ran"); 

由我把那個URL的地址欄,我想「它跑」,彈出的警告。

我很懷疑,這是可能的,但我希望對希望有一個頭或MIME類型或類似的東西,我可以設置和奇蹟般地做到這一點。

+3

問題是:其中的上下文將這個腳本被執行?瀏覽器是否應該創建一個空的HTML頁面? – levu

+0

很確定這是不可能的,因爲levu描述 –

+0

@Smamatti - 'x-'?它在2006年停止了實驗(http://www.rfc-editor.org/rfc/rfc4329.txt)。這不會工作。 – Quentin

回答

11

這是不可能的。瀏覽器不知道JavaScript應該在哪個上下文中運行;例如,window的屬性是什麼?如果你認爲它可以提出一些隨機默認值,那麼document的行爲呢?如果有人這樣做document.body.innerHTML = "foo"應該發生什麼?

JavaScript與圖像或HTML頁面不同,它依賴於它運行的上下文。該上下文可以是HTML頁面,也可以是Node服務器環境,或者甚至可以是Windows Scripting Host。但如果你只是瀏覽到一個URL,瀏覽器不知道什麼情況下應該運行腳本。


作爲一種變通方法,或者用about:blank作爲主機頁面。然後,你可以插入腳本到文檔中,賦予其相應的執行上下文,通過粘貼在地址欄上以下內容:

javascript:(function() { var el = document.createElement("script"); el.src = "PUT_URL_HERE"; document.body.appendChild(el); })(); 
+1

上下文的問題從來沒有出現過。我想要的內容與提供給完全空白的HTML頁面的內容相同 - 但是我知道的和瀏覽器知道的內容之間顯然存在巨大差距。 – Malvolio

+2

編碼讓你變得卑微@Malvolio :) –

2

不是直接的,但你可以製作一個簡單的服務器端腳本,例如在PHP中。取而代之的

http://example.com/file.js 

,導航到:

http://localhost/execute_script.php?url=http://example.com/file.js 

當然,你可以通過在Apache中使用RewriteRule,和/或添加重定向到127.0.0.1主機文件中的另一個條目smallen這一點。

請注意,這在安全性方面並不好,但如果您自己使用它並知道您要下載的內容,則應該沒問題。

<html> 
<head> 

    <script> 
    <? echo file_get_contents($_GET['url']); ?> 
    </script> 

</head> 

<body> 

</body> 
</html> 
0

您可以用qt/WebKit的寫自己的瀏覽器,並做到這一點。 當用戶在url位置輸入一個js文件時,您可以讀取該文件並執行javascript。

http://code.google.com/apis/v8/get_started.html是另一個頻道。 不知道它是否符合我們的需求。

+1

不,謝謝。我可以控制腳本和服務器,但不能控制瀏覽器。 – Malvolio

0

使用Node.js. 下載並安裝node.js並創建一個http/s服務器並寫下你想要在瀏覽器中顯示的內容。 在服務器上使用localhost :: portNumber作爲url來運行您的文件。 參考節點JS DOC - https://nodejs.org/dist/latest-v7.x/docs/api/http.html

運行 - http://localhost:3000

樣品如下代碼:

var http = require("http"); 
    var server = http.createServer(function(req,res){ 
    res.writeHead(200,{'Content-Type':'text/html'}); 
     res.end("hello user"); 
    }); server.listen(3000);` 
相關問題