Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 禁止内联样式CSP和HTML元素的动态定位_Javascript_Html_Css_Content Security Policy - Fatal编程技术网

Javascript 禁止内联样式CSP和HTML元素的动态定位

Javascript 禁止内联样式CSP和HTML元素的动态定位,javascript,html,css,content-security-policy,Javascript,Html,Css,Content Security Policy,客户端已更改其CSP,以禁止其服务器上的内联样式。据我所知,这意味着我们不能再使用JS来动态定位/动画化/样式化HTML元素,例如,我们不能检测DOM元素的位置,并通过JS定位它旁边的另一个元素 这是正确的吗?有没有一种变通方法可以让我们使用这个CSP限制动态地设置DOM元素的动画?JavaScript在客户端上执行。除非过滤软件非常聪明,否则您仍然可以添加动态内联样式,因为服务器不知道浏览器中发生了什么。但是,您不能将内联样式添加为发送给客户端的HTML的一部分。解决此问题的正确方法是使用CS

客户端已更改其CSP,以禁止其服务器上的内联样式。据我所知,这意味着我们不能再使用JS来动态定位/动画化/样式化HTML元素,例如,我们不能检测DOM元素的位置,并通过JS定位它旁边的另一个元素


这是正确的吗?有没有一种变通方法可以让我们使用这个CSP限制动态地设置DOM元素的动画?

JavaScript在客户端上执行。除非过滤软件非常聪明,否则您仍然可以添加动态内联样式,因为服务器不知道浏览器中发生了什么。但是,您不能将内联样式添加为发送给客户端的HTML的一部分。

解决此问题的正确方法是使用CSS对象模型(CSSOM)

给定以下设置样式的方法:

  • .

    //由于CSP而失败
  • document.getElementById(id).setAttribute('style','left:343px');//由于CSP而失败
  • document.getElementById(id.style.left='343px'
  • 只有最后一个将成功遵守CSP指令
    style src:self
    (因为它使用的是CSSOM)

    这就是使用函数的原因:

    当使用.css()
    作为setter时,jQuery修改元素的
    样式
    属性。例如,
    $(“#mydiv”).css(“color”、“green”)
    相当于
    document.getElementById(“mydiv”).style.color=“green”


    动画不需要javascript,可以使用css3关键帧和过渡设置动画类,只需将类附加到相关元素。然而,令人遗憾的是,无论如何,附加都必须使用javascript执行。如果不使用javascript,不刷新整个页面,就无法设置dom元素的动画…谢谢,但我确实需要能够通过设置CSS位置来使用javascript动态定位元素。例如。我需要查找元素的位置(左),然后通过JavaScript更改此位置。因此,我需要设置一个类似style=“left:343px;”的行样式。在页面加载之前,我不知道这个位置是什么。我唯一能想到的是创建一个涵盖所有这些位置的类的整体加载(例如left1:left:1px;)还有其他方法吗?没有人会这么做,如果不是三倍的话,它可能会让你的流量翻倍。看看,它可能会给你一个方向:是的,我没有意识到你可以使用JS/jQuery添加样式,例如..css()等等。谢谢。您可以修改样式属性,但使用JS插入样式元素仍然违反CSP。这是误导性的,不应标记为答案。@MikePost有正确的答案