我在Plone的页面中创建了一个HTML表单,用于处理我在提交时提供的Javascript代码。 Javascript已放置在plone_skins>定制。代码是检查调用页面的URL中的关键字,该页面指示在使用第三方服务进行身份验证后浏览器需要重定向到的另一个页面的地址。代码如下所示:
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length; i++) {
var pair = vars[i].split("=");
if(pair[0] == variable){return pair[1];}
}
return false;
}
function setLoginUrl(form) {
var target = getQueryVariable("keyword");
var loginUrl = "https://our.shibboleth.login.address.here";
if(target != false) {
loginUrl = loginUrl + "?keyword=" + keyword;
}
form.action = loginUrl;
return true;
}
我已经为Plone页面禁用了TinyMCE,并附带了表单和登录按钮,以便&#34; onsubmit&#34;没有被剥夺。这是该页面的代码:
<form name="processLogonForm" action ="" onsubmit="setLoginUrl(this);" method="post">
<input type=submit value="Instructors & Students"/>
</form>
我在Plone之外测试了Javascript,并按预期重定向到正确的页面,并将关键字令牌中的信息传递给下一页。但是,在Plone中,提交表单会导致重新加载相同的页面。从积极的方面来说,如果关键字令牌包含在URL中,那么会传递给重新加载的页面,但我更希望提交将用户带到授权页面。
我已经在Plone中注册了脚本,在页面中启用了脚本标记,并测试了其他Javascript代码,以确保我能正确地将所有内容都放入Plone中。关于我可能忽略了这段代码的任何建议吗?
更新: 我已经采取了建议,创建一个包含代码的自定义页面模板。我发现我忘了使用金属标签将脚本传递给使用此视图的页面。我可以在Plone生成页面的源代码中看到该脚本。但是,页面继续重新加载。
答案 0 :(得分:0)
这更像是“如果你不需要这样做,试试另一件事”的答案。如果你需要做的只是运行一些JS,你应该考虑创建一个自定义视图模板并将所需的一切放在那里,而不是试图让它在变换和TinyMCE中工作。它们都不会受到变形的影响。这是绕过Plone的一种干净方式,如果(我认为就是这种情况)你实际上并不需要Plone的功能。
答案 1 :(得分:0)
我猜你的onsubmit正在被覆盖,永远不会被运行。
使用onsubmit不仅仅是TinyMCE。而且,你不应该禁止使用tinymce。 TinyMCE应该只影响加载编辑器的页面。
夫妻俩。首先,验证你的JS没有运行。使用调试器语句或在其中抛出警报(&#39; hi&#39;)语句。
接下来,既然可能还有其他东西使用提交事件,只需使用jQuery来完成你的工作而不是onsubmit属性(onsubmit isn&#39; ta方式来做js事件无论如何)。 / p>
您的JavaScript代码将类似:
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length; i++) {
var pair = vars[i].split("=");
if(pair[0] == variable){return pair[1];}
}
return false;
}
function getLoginUrl() {
var target = getQueryVariable("keyword");
var loginUrl = "https://our.shibboleth.login.address.here";
if(target != false) {
loginUrl = loginUrl + "?keyword=" + keyword;
}
return loginUrl;
}
$(document).ready(function(){
$('[name="processLogonForm"]').submit(function(){
var $el = $(this);
$el.attr('action', getLoginUrl());
});
})