我正在尝试打开一个新窗口并用准备好复制到剪贴板、打印或保存到硬盘驱动器的数据填充它。我正在通过Greasemonkey 用户脚本执行此操作。
脚本的简化版本:
window.addEventListener("load", function() {
/*EXPORT DATA*/
//Create a button
var button = document.createElement("input");
//call the actual export function
button.onclick = function() {window.exportujRozvrh();};
//I also tried this:
//button.onclick = (function() {window.exportujRozvrh();}).bind(window);
button.value = "Print data in new tab";
button.type = "button";
//Append button to a node
getElementByXpath(tisk_path).appendChild(button);
});
window.exportujRozvrh = function() {
//create a new tab (or window if tab not supported)
var okno = window.open(); //No url should be fine for same origin policy, shouldn't it?
//check if popup exists
if(okno==null)
alert("Popup blocked.");
//Write the data
okno.document.open();
okno.document.write("data");
okno.document.close();
}
如果从此button
函数运行会引发以下错误:
SecurityError: The operation is insecure.
但是,如果该函数是从调试控制台启动的或从 URL 栏(通过输入1)脚本正常工作。javascript: window.exportujRozvrh();void(0)
)
所以我想这是这个函数在事务中启动的上下文。这就是我尝试使用.bind(window)
.
1)调用它会引发“未定义窗口”错误。我已经习惯了窗口总是被定义的事实,所以我放弃了这个。