现象

SyntaxHighlighter++在安装之后,原已可以正常使用,通过“插入文章”按钮可以添加代码段。忽然莫名地无法添加了,使用Firebug可以看到如下错误:“Error: Permission denied to access property ‘send_to_editor’ if((typeof win.send_to_editor) != “undefined”) { ”。

结论

在syntaxhighlighterpp.php文件中找到settext函数(可以在wordpress\wp-content\plugins\syntax-highlighter-with-add-button-in-editor\路径找到,也可以通过“插件”->“SyntaxHighlighter++”->“编辑”来打开),并找到以下代码:

    var win = window.dialogArguments || opener || parent || top;

修改上述代码为以下内容即可。

    //var win = window.dialogArguments || opener || parent || top;
    var win = window;

分析

在网上搜索上述错误,没有找到直接的结果,相关的结果是“Permission denied to access property ‘document’”源于跨域,另外也可能于浏览器的安全设置有关。

初步分析该问题出现的场景应该与跨域无关。

在Firebug中点击查看,发现是在SyntaxHighlighter++的js中。

怀疑SyntaxHighlighter++有错误,卸载重装,无效。

怀疑是浏览器安全设置的问题,或者是浏览器自行升级导致的。于是多番尝试调整隐私策略,无效。重新安装Firefox 27,无效。重新安装Firefox 11,无效。在虚拟机Windows XP中安装Firefox 27,使用正常;安装Firefox 11,使用正常。

怀疑是Firefox的某些插件引起的,查看时意外发现了一大堆插件,禁用其中的“分享工具条0.16”后(重启Firefox后),功能恢复正常。

据此以为是该插件引起的,但是后来发现一个现象:停用插件后,点击旁边的“立即重启”,则浏览器重启后,SyntaxHighlighter++可以正常使用;而手动关闭Firefox,并再度开启之后,又恢复成原来的错误了。此二者有何差别不得而知。

2

再度查看出错处的JS代码,是SyntaxHighlighter++插件自己的代码,其中以下部分,与\wp-admin\includes\media.php 页面中的用法相同,疑似仿照而来。

var win = window.dialogArguments || opener || parent || top;

\wp-admin\includes\media.php文件应该是用来“添加媒体”的,在点击“添加媒体”按钮后会弹出新的窗口,再新窗口中通过opener访问母窗体是容易理解的,但是 SyntaxHighlighter++并没有新弹出窗口,为什么也要取opener呢,直接取window是不善就可以了?按上述分析修改后,自测通过,仅供参考。

其他

在遨游浏览器中,可以正常使用;IE浏览器未验证,估计应该也可以正常使用。着急使用时,可以临时作为应急的规避措施。

停用Firefox的各种插件后,浏览器速度果然快了很多。以前认为基于Firefox的兼容性验证较少,插件开发较少,因而Firefox更为安全,更不容易“中招”,看来这个想法早已过时了。