我已经失去了几个小时试图弄清楚如何解决javascript问题。我有一个JS函数打开一个弹出窗口:
function openSearchWindow(searchType, targetIdField, targetDescField)
我在这个新窗口中设置了2个属性:
var win = window.open(searchPage, searchType + "search", style);
win.targetIdField = targetIdField;
win.targetDescField = targetDescField;
直到这里,一切都很完美。但是,在我的弹出窗口中,我需要访问我之前设置的这两个变量:win.targetIdField和win.targetDescField
我如何访问它们?我几乎尝试了一切。
编辑 - 及时,
在弹出窗口中,我实际上有一个搜索引擎。当用户单击结果时,有一个JS函数可以获取所选项的ID和描述,并将其传递回“opener”窗口,分别将它们放在targetIdField和targetDescField中。
编辑(2)
一旦在弹出窗口中执行搜索(通过servlet),弹出窗口的URL就会改变,但它总是在同一个域内。
提前致谢。
卢卡斯。
答案 0 :(得分:1)
您是否尝试通过window.targetIdField
访问它们?如果thait不起作用,您可以在父窗口上绑定2个属性(使用window.targetIdField
而不是win.targetIdField
),然后使用window.opener.targetFieldid
从打开的窗口访问这些属性。
答案 1 :(得分:1)
我建议使用setAttribute和getAttribute,因为每个浏览器都支持它(我知道)。
//Setting the properties (in the parent window)
win.setAttribute('targetIdField', targetIdField);
win.setAttribute('targetDescField', targetDescField);
//Accessing the properties (in the pop-up window)
window.getAttribute('targetIdField'); //you might need to use lowercase letters...
//If that doesn't work you can try multiple things
this.getAttribute...
答案 2 :(得分:0)
win.contentWindow
将允许您访问新窗口对象。
然后你可以使用:
win.contentWindow.targetIdField = targetIdField;
win.contentWindow.targetDescField = targetDescField;
为新弹出窗口对象设置targetIdField
和targetDescField
变量。
请注意,跨窗口访问仅限于同一个域。
答案 3 :(得分:0)
从父窗口/开启窗口访问变量可以通过window.opener.yourVariableName