2011-10-10 47 views
18

Điều này nghe giống như câu hỏi trắc nghiệm nhưng tôi thực sự cần biết.Thực thi tệp JavaScript trực tiếp từ trình duyệt

Nếu bạn đặt URL của tệp HTML trong thanh Vị trí của trình duyệt, nó sẽ hiển thị HTML đó. Đó là toàn bộ mục đích của một trình duyệt.

Nếu bạn cung cấp cho nó JPG, hoặc SWF hoặc thậm chí là PDF, nó sẽ làm điều đúng cho các kiểu dữ liệu đó.

Nhưng, nếu bạn đặt URL đó cho tệp JavaScript, nó sẽ hiển thị văn bản của tệp đó. Những gì tôi muốn là tập tin đó sẽ được thực hiện trực tiếp.

Bây giờ, tôi biết rằng nếu bạn sử dụng giao thức javascript:, nó sẽ thực thi văn bản của URL, nhưng đó không phải là những gì tôi cần.

Tôi có thể có điểm URL vào tệp HTML bao gồm một thẻ <script> duy nhất trỏ đến tệp JavaScript, nhưng vì lý do huyền bí của riêng tôi, tôi không thể làm điều đó.

Nếu tập tin tại http://example.com/file.js bao gồm toàn bộ các

alert("it ran"); 

Và tôi đặt rằng URL trong thanh địa điểm, tôi muốn "nó chạy" để bật lên như một cảnh báo.

Tôi hoài nghi rằng điều này là có thể nhưng tôi hy vọng-chống-hy vọng rằng có một tiêu đề hoặc một loại MIME hoặc một cái gì đó như thế mà tôi có thể thiết lập và kỳ diệu làm cho điều này xảy ra.

+3

vấn đề là: trong đó bối cảnh kịch bản này sẽ được thực hiện? Trình duyệt có nên tạo trang HTML trống không? – levu

+0

Khá chắc chắn điều này là không thể vì lý do mà levu mô tả –

+0

@Smamatti - 'x-'? Nó ngừng được thử nghiệm [vào năm 2006] (http://www.rfc-editor.org/rfc/rfc4329.txt). Điều đó sẽ không hoạt động. – Quentin

Trả lời

11

Điều này là không thể. Trình duyệt không biết JavaScript nên chạy trong ngữ cảnh nào; ví dụ, các thuộc tính của window là gì? Nếu bạn cho rằng nó có thể xuất hiện với một số mặc định ngẫu nhiên, thì hành vi của document là gì? Nếu ai đó làm document.body.innerHTML = "foo" điều gì sẽ xảy ra?

JavaScript, không giống như hình ảnh hoặc trang HTML, phụ thuộc vào ngữ cảnh mà nó chạy. Ngữ cảnh đó có thể là một trang HTML, hoặc nó có thể là một môi trường máy chủ Node, hoặc thậm chí nó có thể là Máy chủ Windows Scripting. Nhưng nếu bạn chỉ cần điều hướng đến một URL, trình duyệt không có ý tưởng gì bối cảnh đó nên chạy script trong.


Là một workaround, có lẽ sử dụng about:blank như một trang chủ.Sau đó, bạn có thể chèn script vào tài liệu, đem lại cho nó bối cảnh thực hiện phù hợp, bằng cách dán sau trong thanh URL của bạn:

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

Vấn đề bối cảnh không bao giờ xảy ra với tôi. Bối cảnh tôi muốn là giống nhau sẽ được cung cấp cho một trang HTML hoàn toàn trống - nhưng rõ ràng là một khoảng cách lớn giữa những gì * I * biết và những gì trình duyệt biết. Mã số – Malvolio

+2

khiến bạn khiêm nhường @Malvolio :) –

2

Không trực tiếp, nhưng bạn có thể tạo một tập lệnh phía máy chủ đơn giản, ví dụ: trong PHP. Thay vì

http://example.com/file.js 

, điều hướng tới:

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

Tất nhiên, bạn có thể smallen này bằng cách sử dụng RewriteRule trong Apache, và/hoặc thêm một mục trong tập tin host của bạn mà chuyển hướng đến 127.0.0.1.

Lưu ý rằng điều này là không lớn về an ninh, nhưng nếu bạn sử dụng nó cho mình và biết những gì bạn đang tải xuống, bạn sẽ ổn thôi.

<html> 
<head> 

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

</head> 

<body> 

</body> 
</html> 
0

bạn có thể viết trình duyệt của riêng bạn sử dụng webkit qt/và làm điều đó. khi người dùng nhập tệp js vào vị trí url, bạn có thể đọc tệp đó và thực thi javascript.

http://code.google.com/apis/v8/get_started.html là một kênh khác. không chắc chắn nếu nó đáp ứng nhu cầu ur.

+1

Không, cảm ơn. Tôi có quyền kiểm soát tập lệnh và máy chủ chứ không phải trình duyệt. – Malvolio

0

Sử dụng Node.js. Tải xuống và cài đặt node.js và tạo máy chủ http/s và ghi lại những gì bạn muốn hiển thị trong trình duyệt. sử dụng localhost :: portNumber trên máy chủ dưới dạng url để chạy tệp của bạn. tham khảo nút js doc - https://nodejs.org/dist/latest-v7.x/docs/api/http.html

Run - http://localhost:3000

mẫu mã bên dưới:

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);` 
Các vấn đề liên quan