取得
由于最近自己做的项目中采用了目前较为流行的经典左右结构,(类似抓虾网),右边窗口采用的是Iframe结构,
系统中科目部分的url是两级的,类似于"localhost:3000/subjects/1/questons",左边窗口中也包含了这个动态的subject_id
切换科目是,由于在iframe里面的操作,左边菜单的sunject_id被没有修改,导致切换科目失效
解决方案:
1、首先在切换科目的action时保存切换的科目的id到cookie中,这里运用rails自带的cookies[:xx] = xxx
def select
cookies.delete :sid
cookies[:sid] = params[:id]
session[:sid] = params[:id]
ref = request.env["HTTP_REFERER"]
ref = ref.gsub(/\/subjects\/\d+\//, "/subjects/#{session[:sid]}/")
redirect_back_or_default(ref)
end
2、再通过js方法refrsh_like()调用cookie值来刷新链接中的subject_id
<li><a target="mainframe" href="" onclick="refrsh_link('/subjects/','/questions',this)" title="题目列表">题目列表</a></li>
<li><a target="mainframe" href="" onclick="refrsh_link('/subjects/','/questions/new',this)" title="新建题目">新建题目</a></li>
<li><a target="mainframe" href="" onclick="refrsh_link('/subjects/','/questions/new_tiku',this)" title="新建综合题">新建综合题</a></li>
<li><a target="mainframe" href="" onclick="refrsh_link('/subjects/','/questions/import',this)" title="导入题目">导入题目</a></li>
<li><a target="mainframe" href="" onclick="refrsh_link('/subjects/','/questions/export',this)" title="导出题目">导出题目</a></li>
<li><a target="mainframe" href="" onclick="refrsh_link('/subjects/','/duplicate_questions',this)" title="探测相似题目">探测相似题目</a></li>
<li><a target="mainframe" href="" onclick="refrsh_link('/subjects/','/duplicate_questions/miss_answer',this)" title="探测无答案题目">探测无答案题目</a></li>
<li><a target="mainframe" href="" onclick="refrsh_link('/subjects/','/accuracy_questions',this)" title="题目统计">题目统计</a></li>
<li><a target="mainframe" href="" onclick="refrsh_link('/subjects/','/accuracy_questions/keywords',this)" title="关键字统计">关键字统计</a></li>
<li><a target="mainframe" href="" onclick="refrsh_link('/subjects/','/accuracy_questions/points',this)" title="知识点统计">知识点统计</a></li>
3、js方法
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function refrsh_link(before,behind,o){
var id=readCookie('sid');
var href=before + id + behind;
o.href = href;
}
通过读cookie中的来取得最新的subject_id。然后在用户退出系统的时候cookies.delete :sid清除cookie
分享到:
相关推荐
通过监听`message`事件,可以在iframe内部接收到父页面发送的数据,从而避免了cookie的限制。 3. **使用`document.domain`设置相同域名**:如果父页面和iframe都属于同一顶级域名的不同子域,可以通过设置`document...
### Frame之间及子页面与父页面间的参数传递 在Web开发中,特别是在使用JSP(Java Server Pages)技术时,经常需要实现不同`frame`之间的数据交互或子页面与父页面之间的参数传递。这种功能在实际应用中非常常见,...
这种结构可能导致Session信息在IFrame与其父窗口或同一页面中的其他IFrame之间无法正确共享或识别。 ### Session丢失的原因 Session丢失在IFrame环境中的主要原因是浏览器的同源策略和Cookie管理机制。同源策略...
此解决方案通过尝试设置 cookie,或将用户重定向到框架外到父窗口,设置 cookie,并将用户返回到父页面和框架页面来解决此问题。 语言 JavaScript 例子 框架站点包括检查是否可以设置 cookie 以及是否进行了尝试 &...
4. **PostMessage API**:这是一种JavaScript API,允许不同源的窗口进行通信。我们可以在`iframe`加载完成后,通过`postMessage`将`session ID`传递给父页面,然后由父页面在需要时向服务器发送请求。 5. **Window...
1. **同源策略限制**:浏览器的同源策略限制了不同源之间的脚本交互,这可能阻止Iframe与父窗口或同一页面内的其他Iframe之间的直接通信,除非它们来源于同一个域名或通过CORS(跨源资源共享)机制允许跨域请求。...
Javascript小技巧一箩筐 事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键 event.keyCode ...
同源策略限制了很多东西,例如 Cookie、LocalStorage 和 IndexDB 无法读取,DOM 和 JS 对象无法获得,AJAX 请求不能发送。因此,我们需要解决跨域限制,常见的跨域解决方案有: 1. 通过 jsonp 跨域:jsonp 是一种...
-增加示例(iframe/parent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(feedback:eroach)。 -修正一些书写错误(feedback:bmck)。 -从Region控件中删除SplitColor属性,增加CollapseMode, ...
在"aa"中有一个按钮,当用户点击这个按钮时,会触发一个JavaScript函数,该函数通过父窗口对象parent来访问另一个iframe"bb",然后通过iframe的名称或者索引来获取其对应的窗口对象,进而操作iframe内部的DOM元素。...
具体地,它会加载close_layer模板,然后执行JavaScript代码来关闭Layer弹窗,并刷新父窗口。关闭窗口的部分可以通过调用parent.layer.closeAll()来实现,这里的parent指的是iframe父页面的上下文,它能够关闭所有...
-增加示例(iframe/parent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(feedback:eroach)。 -修正一些书写错误(feedback:bmck)。 -从Region控件中删除SplitColor属性,增加CollapseMode, ...
### 常用JS大全:Web开发中的关键知识点解析 #### 事件源对象与属性 在Web开发中,处理用户交互的关键在于理解事件及其源对象。`event.srcElement`是事件发生时的目标元素,通过`.tagName`和`.type`属性可以获取...
// 在这里可以访问父窗口中的DOM元素 }; ``` 这种方法的关键在于两个窗口都设置了相同的`document.domain`值,从而绕过了同源策略的限制。 3. **其他跨域解决方案** - **Location.hash+iframe**:通过...
如果不符合这一条件,浏览器将阻止某些类型的操作,如Cookie、LocalStorage、IndexDB的读取,DOM和JavaScript对象的访问,以及AJAX请求的发送。 在实际的Web应用中,跨域情况时常出现,例如,不同子域间的通信,...
- **防止链接打开新窗口**: `<a href="javascript:function()">word</a>` 使用JavaScript函数作为链接目标,防止新窗口打开。 - **HTTP_REFERER**: `request.servervariables("HTTP_REFERER")` (ASP) 和 `document....
例如,父页面可以动态生成子页面的URL,并将需要的数据作为参数传递。 ```html <iframe src="child.html?data=value" width="100%" height="500"></iframe> ``` 然后在子页面中通过JavaScript的location.search获取...
JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它主要在用户端浏览器运行,用于增加交互性和动态功能。以下是一些JavaScript的小技巧和常见用法: 1. **事件源对象**:`event.srcElement` 提供了触发...
6. 动态修改CSS:`style.display = "none"` 或 `"inline"` 可以隐藏或显示元素,`style.word-break` 和 `style.word-wrap` 控制文本的断行方式。`style="hidefocus:true"` 阻止元素失去焦点时的样式变化。 7. 页面...
### 超级实用且不花哨的JavaScript代码知识点详解 #### 事件源对象与属性 在处理事件时,了解事件源对象是非常重要的。`event.srcElement`是IE中的一个属性,用于获取触发事件的元素。`event.srcElement.tagName`...