Joh*_*lle 5 javascript wordpress ssl jquery
我正在我的一些wordpress驱动的网站页面上实施SSL.目前我在安全页面上收到混合内容警告 - 我的自定义主题包括所有页面上出现的大量链接和src属性.链接显示在页眉,页脚,导航(由wordpress功能自动生成)和侧边栏(部分来自插件)中.虽然理论上我可以为安全页面编写自定义页眉和页脚,但是在安全页面上使用插件和导航是不可能的.
我一直想要完成的是编写一个javascript或jQuery函数,它可以在通过SSL提供的页面上将"http"的所有出现更改为"https".
这个问题公然向我展示了我的编码能力的极限.问题是,最终供应文件包含几个PHP文件,其中一些我没有什么控制(将不得不修改插件(一个或多个),这是(A)相当复杂,(B)我想在未来的更新).正则表达式对我来说仍然是一个谜.
我不知道这是在所有可能以及是否触发与变化$(文件).就绪或在window.onload不会太晚无论如何,因为浏览器会比前面的混合内容的警告发出.
先谢谢你,约翰内斯
Mat*_*y F 11
您是否查看了与协议无关的相对URL前缀?
例如,如果您有以下内容
<img src="//myimage.png" />
Run Code Online (Sandbox Code Playgroud)
它将使用页面当前所使用的任何协议.更多信息:http://paulirish.com/2010/the-protocol-relative-url/
我同意其他海报,他们认为有更好的方法可以做你想做的事情.话虽如此,这听起来像是你的约束,所以让我提供一个解决方案.(顺便说一下,帽子提示和协议相对URL的+1票;我不知道这个!)
无论如何,我假设你在<a>标签中的内容,但是应该很容易将其推断给其他人:
if (document.location.protocol === 'https:') {
$('a').each(function() {
var href = $(this).attr('href');
if (href.indexOf('http:') > -1) {
href = href.replace('http:', 'https:');
$(this).attr('href', href);
}
});
}
Run Code Online (Sandbox Code Playgroud)
有了这个帮助,我会鼓励你看看是否有更安全/更实际的方法来做你想做的事情.我还要提到这种方法可能只适用于链接; 在页面加载后修改CSS和脚本引用肯定会适得其反,并且无法获得您想要的结果.
请注意"document.location.protocol ==='https:'"中的":".
如果您只想确保在发出 HTTPS 请求时没有混合内容,请尝试在当前主题的“function.php”文件中添加简单的代码片段。
function _bd_force_https()
{
if ( empty( $_SERVER['HTTPS'] ) ) return;
ob_start();
}
add_action( 'template_redirect', '_bd_force_https', 1 );
function _bd_output_https_page()
{
if ( empty( $_SERVER['HTTPS'] ) ) return;
echo str_ireplace( 'http://', 'https://', ob_get_clean() );
}
add_action( 'wp_footer', '_bd_output_https_page', 99 );
Run Code Online (Sandbox Code Playgroud)
优点:
缺点:
我认为你应该使用像"WordPress HTTPS"这样的插件.你应该注意太多的边缘情况(比如你没有控制权的第三方插件),并且像这样使用一个很好的附加组件将是一个有趣的方法.
WordPress HTTPS旨在成为在WordPress网站上使用SSL的一体化解决方案.提供免费支持!
| 归档时间: |
|
| 查看次数: |
26071 次 |
| 最近记录: |