Добавить JS после загрузки DOM [дубликат]

Вам нужно передать его как параметр XML.

Изменить: быстрый код из моего проекта, чтобы дать вам идею:

CREATE PROCEDURE [dbo].[GetArrivalsReport]
    @DateTimeFrom AS DATETIME,
    @DateTimeTo AS DATETIME,
    @HostIds AS XML(xsdArrayOfULong)
AS
BEGIN
    DECLARE @hosts TABLE (HostId BIGINT)

    INSERT INTO @hosts
        SELECT arrayOfUlong.HostId.value('.','bigint') data
        FROM @HostIds.nodes('/arrayOfUlong/u') as arrayOfUlong(HostId)

Затем вы можете использовать временную таблицу присоединиться к вашим столам. Мы определили arrayOfUlong как построенную в XML-схему для обеспечения целостности данных, но вам не нужно это делать. Я бы рекомендовал использовать его, так что вот быстрый код, чтобы убедиться, что вы всегда получаете XML с longs.

IF NOT EXISTS (SELECT * FROM sys.xml_schema_collections WHERE name = 'xsdArrayOfULong')
BEGIN
    CREATE XML SCHEMA COLLECTION [dbo].[xsdArrayOfULong]
    AS N'<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="arrayOfUlong">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded"
                            name="u"
                            type="xs:unsignedLong" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>';
END
GO
6
задан Don 27 July 2012 в 21:09
поделиться

4 ответа

Похоже, что ваш <script> тег добавлен , как вы ожидаете, но код внутри него не выполняется. Такая же ошибка возникает, если вы попытаетесь использовать document.head (или любой другой элемент DOM, похоже). По какой-либо причине (возможно, соблюдение стандартов, возможная безопасность) встроенный код внутри блоков <script>, добавленных через .innerHTML, просто не запускается.

Однако у меня есть рабочий код, который создает аналогичные Функциональность:

var script = document.createElement('script');
script[(script.innerText===undefined?"textContent":"innerText")] = 'alert(1);';
document.documentElement.appendChild(script);

Здесь вы добавляете блок <script> с documentElement.appendChild и используете textContent или innerText для установки содержимого <script>.

4
ответ дан apsillers 25 August 2018 в 21:13
поделиться

Вы не должны этого делать. В Firebug перейдите на вкладку «Консоль». Вы можете ввести код прямо там. Рядом с тремя синими угловыми скобками внизу консоли введите это, а затем нажмите клавишу ввода: alert("asdf");

-4
ответ дан austincheney 25 August 2018 в 21:13
поделиться

На самом деле вы можете использовать eval, но это не является хорошей практикой для проблем безопасности. Вы можете сделать что-то вроде этого:

var scr = document.createElement('script');
scr.src = 'yourscriptsource';
document.body.appendChild(scr);

Надеюсь, что это поможет!

0
ответ дан axcdnt 25 August 2018 в 21:13
поделиться

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

Подробнее об этом можно прочитать здесь: https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet

Этот фрагмент работает:

var newScript = document.createElement( "script" );
newScript.type = 'text/javascript';
var scriptContent = document.createTextNode( "googletag.cmd.push( function() { googletag.display( '" + encodeURIComponent( divID ) + "' ); } );" ); 
newScript.appendChild( scriptContent ); 

Вот пример в действии: https://jsfiddle.net/BrianLayman/4nu667c9/

0
ответ дан Brian Layman 25 August 2018 в 21:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: