Вам нужно передать его как параметр 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
Похоже, что ваш <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>
.
Вы не должны этого делать. В Firebug перейдите на вкладку «Консоль». Вы можете ввести код прямо там. Рядом с тремя синими угловыми скобками внизу консоли введите это, а затем нажмите клавишу ввода: alert("asdf");
На самом деле вы можете использовать eval
, но это не является хорошей практикой для проблем безопасности. Вы можете сделать что-то вроде этого:
var scr = document.createElement('script');
scr.src = 'yourscriptsource';
document.body.appendChild(scr);
Надеюсь, что это поможет!
Всегда лучше использовать элементы и добавлять их, а не прятать вставку любого 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/