Ужасный Input
мой скрипт пытается аплоадить файлы в этот input
<div class="goog-ws-bottom" xmlns="http://www.w3.org/1999/xhtml"> <div id="COMP_page-subpages" style=""> </div> <div id="COMP_page-attachments" class="" style=""> <div id="goog-attachment-wrapper"> <h3 id="goog-attachment-header"> </h3> <div style="" jotid="goog-attachment-inner"> <ul id="JOT_ATTACH_container"> </ul> <form id="sites-attachment-form" class="goog-ws-attachment-form" enctype="multipart/form-data" method="post"> <p> Приложить файл: <input type="file" contenteditable="false" onchange="return JOT_ATTACH_handleUploadXfer()" name="userfile" onclick="this.blur()"/> <input type="hidden" value="/Home" name="pagePath"/> </p> </form> </div> </div> </div> вот сам скрипт (скрипт входит в состав аддона мозилы): const nsIFilePicker = Components.interfaces.nsIFilePicker; var filePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); function SelectFiles() { var files = []; filePicker.init(window, "Select files to upload", nsIFilePicker.modeOpenMultiple); var rc = filePicker.show(); if (rc == nsIFilePicker.returnOK) { var picked = filePicker.files; while(picked.hasMoreElements()) { var aFile = picked.getNext(); aFile.QueryInterface(Components.interfaces.nsIFile); files.push(aFile.path); } } return files; } var uploader = {}; uploader.files = []; uploader.index = 0; uploader.iframe = null; uploader.GetBrowser = function() { return document.getElementById("pages-frame"); } uploader.CheckIfUploadFormAvailable = function() { var browser = uploader.GetBrowser(); var available = ("file" == browser.contentDocument.forms[0].elements[0].type); return available; } uploader.SetIframeOnloadListener = function() { var browser = uploader.GetBrowser(); var iframeDiv = browser.contentDocument.getElementById("tr_upload-form-div"); uploader.iframe = iframeDiv.getElementsByTagName("iframe")[0]; uploader.iframe.addEventListener("load", uploader, false); } uploader.RemoveIframeOnloadListener = function() { uploader.iframe.removeEventListener("load", uploader, false); } uploader.UploadNext = function() { var index = uploader.index; if (index < uploader.files.length) { var browser = uploader.GetBrowser(); var form = browser.contentDocument.forms[0]; var input = form.elements[0]; input.value = uploader.files[index]; [B]form.submit();[/B] // Здесь пытаюсь сабмитить форму - но не получается - строка с путем к файлу появляется, но сабмитить не получается var box = document.getElementById("file-upload-area"); box.childNodes[index].checked = true; } uploader.index++; var pending = (uploader.index <= uploader.files.length); return pending; } uploader.UploadFiles = function(files) { uploader.files = files; uploader.index = 0; if (files.length) { uploader.SetIframeOnloadListener(); uploader.UploadNext(); } } uploader.handleEvent = function(ev) { if (ev.type == "load") { var pending = uploader.UploadNext(); var browser = uploader.GetBrowser(); if (!pending) { var progress = document.getElementById("progress-bar"); progress.parentNode.removeChild(progress); uploader.RemoveIframeOnloadListener(); browser.contentDocument.forms[0].reset(); // Dumb thing to avoid a POSTDATA prompt browser.goHome(); } } }; function GetFiles() { if (!uploader.CheckIfUploadFormAvailable()) { alert("Please, click on the \"[upload]\" link of the Uploaded Stuff widget and press again this button."); } else { var files = SelectFiles(); var box = document.getElementById("file-upload-area"); while (box.firstChild) { box.removeChild(box.firstChild); } var checkbox; for (var ii=0; ii < files.length; ii++) { checkbox = document.createElement("checkbox"); checkbox.setAttribute("label", files[ii]); checkbox.setAttribute("disabled", true); box.appendChild(checkbox); } if (files.length) { var progress = document.createElement("progressmeter"); progress.setAttribute("mode", "undetermined"); progress.setAttribute("id", "progress-bar"); box.appendChild(progress); uploader.UploadFiles(files); } } } у меня не получается просабмитить input <input type="file" contenteditable="false" onchange="return JOT_ATTACH_handleUploadXfer()" name="userfile" onclick="this.blur()"/> потому что ха ним следует <input type="hidden" value="/Home" name="pagePath"/> указывающий на путь в папку сервера но если пытаюсь просабмитить в любой другой input на стринце - не содержащий <input type="hidden" value="/Home" name="pagePath"/> подобные приколы - то событие проходит помогите пожалуйста! мне необходимо передать в <input type="file" contenteditable="false" onchange="return JOT_ATTACH_handleUploadXfer()" name="userfile" onclick="this.blur()"/> <input type="hidden" value="/Home" name="pagePath"/> стринг - содержащий путь к файлу |
Честно говоря, очень сильно сомневаюсь, что данный скрипт может вернуть реальный путь к файлу. Проверять не буду, но если это действительно так, то где то не доработка в защите мозилы. В любом случае, если ты получаешь нужный результат и всего лишь не можешь его передать "хидден" полю, то можно обойти это и другим путём, чего тут заморачиваться?
function initPath(){ var path2file=function getPath2file(p){ return '/path/to/file/'+p; }; var pathInput=document.createElement('input'); with(pathInput){ type='hidden'; name='pagePath'; value=path2file('bla-bla-bla'); } document.forms[0].appendChild(pathInput); //ну и если требуется сразу... document.forms[0].submit(); } initPath(); И ничего тут такого ужасного нету. Понятное дело, что вместо getPath2file у тебя должна указываться та "волшебная" функция, которая возвращает путь к файлу и вместо forms[0] должна указана форма, в которую ты будешь "апендить" созданный "хидден"-элемент. |
а сервер сам не знает этот путь? И что значит "у меня не получается просабмитить input", ошибки возникают?
Pattern, речь о пути на сервере, насколько я понял |
Цитата:
|
да уж, фраза зачотная ;)
|
Часовой пояс GMT +3, время: 07:06. |