Выполнение файла JavaScript прямо из браузера - PullRequest
21 голосов
/ 10 октября 2011

Это звучит как вопрос пустяков, но мне действительно нужно знать.

Если вы поместите URL-адрес HTML-файла в адресную строку вашего браузера, он отобразит этот HTML-код.В этом вся цель браузера.

Если вы дадите ему JPG, SWF или даже PDF, он будет делать правильные вещи для этих типов данных.

Но если вы дадитеВ этом случае URL-адрес файла JavaScript будет отображать текст этого файла.Я хочу, чтобы этот файл выполнялся напрямую.

Теперь я знаю, что если вы используете протокол javascript:, он выполнит текст URL-адреса, но это не так.не то, что мне нужно.

Я мог бы указать, чтобы URL указывал на файл HTML, состоящий из одного тега <script>, который, в свою очередь, указывает на файл JavaScript, но по моим собственным оккультным причинам я не могу сделатьэто.

Если файл в http://example.com/file.js целиком состоит из

 alert("it ran");

И я поместил этот URL-адрес в адресную строку, я хочу, чтобы "он запускался" всплывал как предупреждение.

Я скептически отношусь к тому, что это возможно, но я надеюсь, что есть надежда, что есть заголовок или MIME-тип или что-то подобное, что я могу установить и чудесным образом осуществить это.

Ответы [ 6 ]

13 голосов
/ 10 октября 2011

Это невозможно. Браузер не знает, в каком контексте должен работать 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); })();
3 голосов
/ 13 декабря 2014

Или вы можете использовать RunJS: https://github.com/Dharmoslap/RunJS

Тогда вы сможете запускать файлы .js просто перетаскиванием.

2 голосов
/ 10 октября 2011

Не напрямую, но вы могли бы сделать простой серверный скрипт, например, на PHP.Вместо

http://example.com/file.js

перейдите к:

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

Конечно, вы можете уменьшить это значение, используя RewriteRule в Apache и / или добавив еще одну запись в ваш файл hosts, которыйперенаправляет на 127.0.0.1.

Обратите внимание, что это не очень хорошо с точки зрения безопасности, но если вы используете его сами и знаете, что скачиваете, у вас все будет хорошо.

<html>
 <head>

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

 </head>

 <body>

 </body>
</html>
1 голос
/ 12 декабря 2013

В адресной строке вы просто пишете

javascript: / некоторый код javascript здесь /; void (0);

http://www.javascriptkata.com/2007/05/01/execute-javascript-code-directly-in-your-browser/

0 голосов
/ 24 мая 2017

Использовать 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);`
0 голосов
/ 10 октября 2011

вы можете написать свой собственный браузер, используя qt / webkit и сделать это. когда пользователь вводит js-файл в URL-адрес, вы можете прочитать этот файл и выполнить javascript.

http://code.google.com/apis/v8/get_started.html - это другой канал. не уверен, что это соответствует вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...