Я работаю над плагином, который позволяет вставлять сторонний код на страницу (либо как iframe
, либо непосредственно в DOM).Как определить, был ли загружен плагин или скрипт без использования eval() или requireJS?
Моя проблема - «прямые инъекции», потому что мне нужно убедиться, что я не добавляю никаких сценариев < > дополнительных времен, если они необходимы на моей главной странице и на странице, которую я загружаю и впрыскиваю.
Например (и я не могу использовать requireJS), мой page.html
выглядит следующим образом:
<html>
<head>
<script type="text/js" src="jquery.js"></script> // exports window.$
<script type="text/js" src="foo.js"></script> // exports window.foo
</head>
<body>
<!-- things that make foo load anotherPage.html and append its content here -->
</body>
</html>
с anotherPage.html
<html>
<head>
<script type="text/js" src="foo.js"></script> // exports window.foo
</head>
<body>
<!-- stuff that also runs on FOO -->
</body>
</html>
загрузка страниц осуществляется с помощью Ajax и когда я обработки data
, возвращенный моей просьбой для anotherPage.html
После этого я приведу список всех элементов:
cleanedString = ajaxResponseData
.replace(priv.removeJSComments, "")
.replace(priv.removeHTMLComments,"")
.replace(priv.removeLineBreaks, "")
.replace(priv.removeWhiteSpace, " ")
.replace(priv.removeWhiteSpaceBetweenElements, "><");
// this will return a list with head and body elements
// e.g. [meta, title, link, p, div, script.foo]
content = $.parseHTML(cleanedString, true);
// insert into DOM
someTarget.append(content);
Здесь я застреваю, пытаясь определить, есть ли сценарий, который я собираюсь добавить в документ, уже есть.
Я не могу пойти по src
, так как имя файла может отличаться, и скрипт может быть размещен в другом домене (с правильно установленным Access-Control-Allow-Origin
). Я также не знаю, что и если скрипт, который я собираюсь добавить, возвращает глобальное я уже определил, и я не могу/не хочу/не хочу использовать eval()
, чтобы узнать.
Вопрос:
Есть ли способ, чтобы определить, является ли плагин или скрипт, который может вернуть глобальный уже «на» странице, когда у меня только «не прилагаемую» < скрипта > элемента доступного?
Спасибо!
if (self. $ && self.foo) {do stuff; } – dandavis
hm. звучит слишком просто. Дай мне попробовать. – frequent
вы можете даже заставить его ждать: (функция wait() {if (! Self. $) {Return setTimeout (wait, 100);}; do Stuff()}()); – dandavis