Member 11592655 Ответов: 3

Как передать переменную во внешний js-файл


я хочу, чтобы отправить URL-адрес внешнего JS-файла


Код :
// viewer.js    (file)
var DEFAULT_URL = 'sampletext.pdf' ;    // here i want to set pdf path which came from aspx.cs page 
var DEFAULT_SCALE_DELTA = 1.1;
var MIN_SCALE = 0.25;
var MAX_SCALE = 10.0;
var VIEW_HISTORY_MEMORY = 20;
var SCALE_SELECT_CONTAINER_PADDING = 8;
var SCALE_SELECT_PADDING = 22;
var PAGE_NUMBER_LOADING_INDICATOR = 'visiblePageIsLoading';
var DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000;


пожалуйста помогите мне решить эту проблему


спасибо.....
заранее

3 Ответов

Рейтинг:
2

F-ES Sitecore

Любые переменные javascript, генерируемые вашим кодом, можно использовать из внешних файлов js, вам просто нужно убедиться, что переменная не читается до ее определения. Вы можете сделать это, убедившись, что файл js включен после определения вашей переменной, или используя что-то вроде события document ready для запуска вашего кода, который обращается к переменным. В этом примере я показываю два способа создания переменной: один-с помощью литерала, другой-с помощью диспетчера сценариев. Если вы используете razor, то первый метод будет работать с обычной разметкой razor.

<body>
    <form id="form1" runat="server">
    <div>
    <script type="text/javascript">
        var a = '<asp:Literal ID="LiteralA" runat="server" />';
    </script>
    </div>
    </form>
    <script src="External.js"></script>
</body>


protected void Page_Load(object sender, EventArgs e)
{
    string text = "Hello";

    // Method 1, use a literal
    LiteralA.Text = text;

    // Method 2, get ClientScript to generate the markup
    string js = string.Format("var b = '{0}';", text);
    Page.ClientScript.RegisterStartupScript(this.GetType(), "setb", js, true);
}


Тот самый external.js файл

if (typeof (a) !== "undefined") {
    alert(a);
}

if (typeof (b) !== "undefined") {
    alert(b);
}


Рейтинг:
2

Sergey Alexandrovich Kryukov

Нет никаких "внешних" или "внутренних" файлов JavaScript. Вот как они работают: вы включаете последовательность <script> … <script> элементы в вашем HTML-коде. Некоторые включают JavaScript внутри тега (вместо '...'), некоторые ссылочные файлы, внешние по отношению к этому HTML. И эти фрагменты на JavaScript обрабатываются последовательно так как это был один большой файл JavaScript.

Поэтому вопрос не имеет смысла. Но стиль кода выглядит очень плохо. Вы можете сделать что-то вроде

var myData = {
   DEFAULT_URL: 'sampletext.pdf',  
   DEFAULT_SCALE_DELTA: 1.1,
   MIN_SCALE: 0.25,
   // ...
   DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT: 5000 }

// ...

var myResult = someFunction(myData);
// it will work even of function someFunction(data)
// is defined below, not in advance, 
// this is how JavaScript works

function someFunction(data) {
   var scale = data.DEFAULT_SCALE_DELTA;
   scale += // ...
   if (scale > data.MIN_SCALE)
      scale = data.MIN_SCALE; // just to illustrate the use of data 
   // ...
   return result;
}


В коде, показанном выше, каждое объявление может быть в отдельном файле, но вы не должны разбивать объявления между файлами в произвольном месте.

Если бы ты мог это сделать более чем один объект с помощью те же свойства как myData, вы должны использовать конструктор объектов.

—СА


Рейтинг:
2

David_Spector

Просто отметим, что проблема с размещением аргументов скрипта "внутренне" в HTML-файлах заключается в том, что указание внутреннего скрипта вызовет отчеты CSP, если сайт является HTTPS и если CSP полностью включен. Причина, приведенная в документе CSP doc, заключается в том, что разрешение внутренних элементов может облегчить инъекцию.

Это может показаться техническим, но когда-нибудь весь интернет будет поддерживать только HTTPS, что сделает его намного более безопасным с незначительным влиянием на производительность и бесплатными сертификатами безопасности (например, уже доступными от Let's Encrypt и Comodo).

Кроме того, давно назрела необходимость полного перепроектирования сети (включая возможность распознавать и запрещать несанкционированный код, который, скорее всего, является вредоносным). Можно было бы надеяться, что многие современные языки, используемые для определения веб-страниц, будут заменены более всеобъемлющими и простыми в использовании языками, что поможет любому человеку создавать свои собственные страницы без необходимости изучать множество различных спецификаций и языков программирования.