Не используйте eval(code)
или new Function(code)
, поскольку оба они в основном одно и то же и должны быть заблокированы CSP.
Просто верните свой контент с сервера как content-type: text/javascript
, а затем перенесите его на свою страницус блоком <script>
или import
.
На сервере у вас будет что-то вроде (псевдокод, поскольку я не знаю, в каком техническом стеке вы находитесь):
[Route("serverActionReturningCode")]
public string ActionReturningCode()
{
// return the content as JS
Response.Headers.Add("content-type", "text/javascript");
// build the response object as JS
return "window.latestResult = {" +
"a: '" + a + "', " +
"b: '" + b + "', " +
"generatedCode: function() { ... }" +
"};";
}
Тогда на вашей странице:
<script src="serverActionReturningCode"></script>
<script>
// Now the script above has run and set window.latestResult
console.log('a', window.latestResult.a);
console.log('b', window.latestResult.b);
console.log('function output', window.latestResult.generatedCode());
</script>
Это позволит вам динамически генерировать функции JS на сервере.
Однако, если вы можете избежать функций и просто должны передать их значенияВместо этого гораздо проще использовать JSON.