我已经尝试过最后几个小时让这段代码工作了,它应该加载带有类内容的div并通过ajax替换当前页面.content。这是一个动态网站,所以我需要它在所有非出站链接上工作。
$("a:not([href^='http://']), a[href^='http://www.example.com'], a[href^='http://example.com']").click(function (event) {
event.preventDefault();
var addressValue = $(this).attr("href");
page = addressValue.replace(/https?:\/\/[^\/]+/i, "");
pagecontent = page+" .content";
$( ".content" ).load( pagecontent );
$.ajax({
url: page,
async: true,
success: function(data) {
var matches = data.match(/<title>(.*?)<\/title>/);
var spUrlTitle = matches[1];
document.title = spUrlTitle;
},
});
});
我已经系统地将错误缩小到以下代码片段。 (一切事先没有它工作)
pagecontent = page+" .content";
$( ".content" ).load( pagecontent );
$.ajax({
url: page,
async: true,
success: function(data) {
var matches = data.match(/<title>(.*?)<\/title>/);
var spUrlTitle = matches[1];
document.title = spUrlTitle;
},
});
通过进一步分析,我确定单击没有http://
的链接时会导致错误page = addressValue.replace(/https?:\/\/[^\/]+/i, "");
上面的代码行无法运行,因为没有http://
我不确定如何解决这个问题,但至少我把它缩小了。
答案 0 :(得分:0)
如果您打算使用此功能访问域外的网页,则会被阻止跨源请求的网站阻止..相反,您可以使用
$.get(page, {/*params*/}, function(data) {
/*Success Callback*/
});
答案 1 :(得分:0)
这似乎有效:
page = addressValue.replace(/(https?:\/\/)?[^\/]+/i, "");
它基本上表示如果它位于前面,则删除http://
或https://
,但如果没有匹配则继续解析。
或者,您可以简单地使用已在规范中定义的DOM锚点对象的属性:
var link_Element = $( this ).get( 0 );
page = link_Element.pathname + link_Element.search;
上面将使用URL查询字符串连接主机名(以及任何其他主机级信息,如端口号等)之后的URL路径,这是本地ajax请求所需的唯一位,因此那个:
<a href="http://example.org/path/to/content">Full URL</a>
<a href="/path/to/content">Local URL</a>
<a href="/path/to/content?stuff=junk">Local URL with query string</a>
会回来:
/path/to/content
/path/to/content
/path/to/content?stuff=junk
无需进行任何字符串解析/清理。