Ужасный 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, время: 09:26. |