1. Использование глобальных переменных
Это самый простой способ, как Google Adsense:
Кода -копия выглядит следующим образом:
<script type = "text/javascript"> Google_ad_client = 'pub-3741595817388494'; </script> <script type = "text/javascript" src = "http: // pagead2. googlesyndication.com/pagead/show_ads.js"> </script>
Недостатком является то, что глобальные переменные введены. Есть два других вариантов способа внедрения файлов:
// Вариация 1: Используйте Document.Write для вывода <script type = "text/javascript"> Google_GA_ID = 'g6u7un8646xx'; document.write (Unescape ('%3cscript type = "text/javascript" src = "http://www.google-analytics.com/ga.js"%3E%3C/Script%3E')); </script> // Вариация 2: Используйте DOM, чтобы применить к Head <Script Type = "text/javascript"> g_beacon_atp = 'Category = & userId = & Channel = 112AD_ID ='; document.getElementsbytagname ('head') [0] .appendchild (document. createElement ('script')) .src = 'http: //taobao.com/atp.js'; </script> // Примечание: приведенный выше код представляет собой виртуальный демонстрационный код, основанный на фактическом приложенииПримечание: вариант 1 используется много раз, а общие методы написания следующие:
<script type = "text/javascript"> // exciet напрямую: document.write ('<script type = "text/javascript" src = "test.js"> </script>'); // или как Yahoo! Главная страница: document.write ('<scr'+'ipt type = "text/javascript" src = "test.js"> </scr'+'ipt>'); </script>2. Получить и проанализировать SRC элемента сценария
По сравнению со всеми переменными, мы предпочитаем передавать параметры, такие как следующие:
<script type = "text/javascript" src = "test.js? a = b & c = d"> </script>
Основная проблема заключается в том, как получить атрибут SRC.
Первый метод состоит в том, чтобы добавить атрибут идентификатора в сценарий, получить текущий скрипт через ID, а затем использовать регулярные для удаления параметров из SRC. Недостатком является то, что в спецификации HTML 4.01 элемент сценария не имеет атрибута ID. Этот недостаток не может считаться недостатком, в конце концов, лучше не иметь никаких стандартов, чем верить в стандарты.
Второй метод - использовать имя файла JS в качестве крючка. После передачи document.getElementsbytagname ('script') в коде JS текущий файл JS будет регулярно соответствовать. Этот метод является ортодоксальным, но требует уникального имени файла. Недостатком является то, что существует много кода и не уточняется, что окажет небольшое влияние на производительность.
Метод 3 должен добавить пользовательские данные атрибута на основе метода 1:
<script id = "testScript" type = "text/javascript" src = "test.js" data = "a = b & c = d"> </script>
В файле test.js используйте следующую строку, чтобы получить пропущенные параметры:
var scriptargs = document.getElementByid ('testScript'). getAttribute ('Data'); Метод 4 предназначен для использования механизма последовательного выполнения JS (загрузка файлов JS может быть синхронной или асинхронной, но при выполнении он должен быть выполнен в порядке в потоке документов). Когда определенный файл JS выполняется, он должен быть последним в файле «загруженного» JS:
var scripts = document.getElementsbytagname ('script'); var currentScript = scripts [scripts.length - 1]; Метод 4 более умный и гениальный, чем метод 2.
С точки зрения упрощения и производительности кода, метод 3> Метод 1> Метод 4> Метод 2
Резюме: Если вы очень заботитесь о стандартах, рекомендуйте метод 4; Если вы чувствуете, что нет необходимости в полной мере соблюдать такие стандарты, как я, порекомендуйте метод 3.
Напишите программу тестирования
<! Doctype html> <html> <script src = "a2.js"> </script> <script src = "a2.js"> </script> <script src = "a2.js"> </script> <script src = "a2.js"> </script> </html>
a2.js
var scripts = document.getElementsbytagname ('script'); var currentScript = scripts.length; alert (CurrStript);
Распечатать отдельно
1 2 3
3. План вдохновения
Если вы такие верные фанаты Джона Ресига, как я, возможно, вы все еще помните «унизительные теги сценария», которые очень много обсуждали в августе прошлого года. Джон Слиг открывает для нас воображаемую дверь. Для вопросов в этой статье мы также можем использовать следующие «злые пути» для его достижения:
<script type = "text/javascript" src = "test.js"> tb.someapp.scriptargs = 'a = b & c = d'; </script>
В файле test.js:
Tb = {}; Tb.someapp = {}; var scripts = document.getElementsbytagname ("script"); eval (scripts [scripts.length - 1] .innerhtml);Это хранит параметры в переменной tb.someapp.scriptargs.
Когда параметров не так много, вы даже можете сделать это:
<script type = "text/javascript" src = "test.js"> a = b & c = d </script>
В файле JS:
var scripts = document.getElementsbytagname ("script"); var scriptargs = scripts [scripts.length - 1] .innerhtml.replace (/[s]/g, '');Воображение бесконечно, вы также можете использовать Onload:
<script type = "text/javascript" src = "test.js" onload = "tb.somefun ('a = b & c = d')"> </script>
Просто определите функцию в файле JS:
Tb = {}; Tb.somefun = function (arg) {// code};Приведенный выше код может работать правильно в браузерах, не связанных с ИМ. Для глупых т.е. вы должны добавить несколько строк кода:
if (window.activexobject) {var scripts = document.getElementsbytagname ('script'); eval (scripts [scripts.length - 1] .getAttribute ('Onload'));}