如何防止Word中使用空格破解JavaScript?

时间:2016-02-21 11:31:26

标签: javascript wordpress

我在WordPress中使用html /代码编辑器插入一些JavaScript。由于我完全不理解的原因,此代码不起作用:

<script type="text/javascript">

function onSubmit() {
    document.getElementById("result").innerHTML = "Hello innerHTML!";
}

</script>

<button onclick="onSubmit()">Say hello</button>

<p id="result">test</p>

这段代码没有问题:

<script type="text/javascript">
function onSubmit() {
    document.getElementById("result").innerHTML = "Hello innerHTML!";
}
</script>

<button onclick="onSubmit()">Say hello</button>

<p id="result">test</p>

因此,函数调用之前和之后的空行会导致问题(在wordpress生成的html代码中,脚本标记包含在段落锚中)。显然,在浏览器中单独运行这两个脚本没有问题。

知道为什么这些空白行会导致这个问题吗?如果没有一些空格,那么稍微长一点的剧本就会难以理解,不可能......

1 个答案:

答案 0 :(得分:0)

你必须

1)从脚本中取出所有空白和行返回,这样WordPress就不会添加<p>标签,然后Javascript就可以正常工作,或者

2)在帖子编辑器中为所有帖子/页面禁用autop (参见http://codex.wordpress.org/Function_Reference/wpautop)所以WP不会添加分段符,或

3)执行以下操作,使autop全局启用,但允许您在各个帖子和页面中使用和标记禁用它。

将以下函数添加到functions.php并使用两个标记

<!-- noformat on --><!-- noformat off -->

页面/帖子编辑器中的

,即

    text will be rendered *with* autop

    <!-- noformat on -->

    text will be rendered *without* autop

    <!-- noformat off -->

    text will be rendered *with* autop

如上所述,两个格式标签之外的内容将启用autop。

添加到主题的functions.php:

// <!-- noformat on --> and <!-- noformat off --> functions

function newautop($text)
{
    $newtext = "";
    $pos = 0;

    $tags = array('<!-- noformat on -->', '<!-- noformat off -->');
    $status = 0;

    while (!(($newpos = strpos($text, $tags[$status], $pos)) === FALSE))
    {
        $sub = substr($text, $pos, $newpos-$pos);

        if ($status)
            $newtext .= $sub;
        else
            $newtext .= convert_chars(wptexturize(wpautop($sub)));      //Apply both functions (faster)

        $pos = $newpos+strlen($tags[$status]);

        $status = $status?0:1;
    }

    $sub = substr($text, $pos, strlen($text)-$pos);

    if ($status)
        $newtext .= $sub;
    else
        $newtext .= convert_chars(wptexturize(wpautop($sub)));      //Apply both functions (faster)

    //To remove the tags
    $newtext = str_replace($tags[0], "", $newtext);
    $newtext = str_replace($tags[1], "", $newtext);

    return $newtext;
}

function newtexturize($text)
{
    return $text;   
}

function new_convert_chars($text)
{
    return $text;   
}

remove_filter('the_content', 'wpautop');
add_filter('the_content', 'newautop');

remove_filter('the_content', 'wptexturize');
add_filter('the_content', 'newtexturize');

remove_filter('the_content', 'convert_chars');
add_filter('the_content', 'new_convert_chars');