我想在java脚本的浏览器的新窗口中打开PDF文件。
但我无法使用window.open
,因为该文件位于跨域。
我试过通过process.Start()
函数通过控制器来做,没有发生任何事情
var p = new Process();
p.StartInfo = new ProcessStartInfo(url);
p.StartInfo.WorkingDirectory = Path.GetDirectoryName(url);
p.Start();
(因为我的Chrome版本?) 有没有人对我有好主意? 非常感谢!
答案 0 :(得分:0)
如果您想通过JavaScript执行此操作,只需添加HttpHandler
或简单WebForm
,即可使用HttpClient
获取跨域PDF文件,并使用以下内容编写文件内容Response.WriteFile()
方法。
并从JavaScript或使用Anchor标记添加对httphandler
或webform
页面的调用。
答案 1 :(得分:0)
如果您将文件放在程序目录上,那么您可以使用此代码
string path = AppDomain.CurrentDomain.BaseDirectory.ToString() + "YourPDF";
然后你做这个
var p = new Process();
p.StartInfo = new ProcessStartInfo(path);
p.StartInfo.WorkingDirectory = Path.GetDirectoryName(path);
p.Start();
答案 2 :(得分:0)
我这样做了: 我使用了Pekita的想法(把文件放在我的程序目录中),然后我可以使用window.open(),关闭窗口后 - 我可以从我的位置删除这个文件。我的Api控制器:
public string Get(string url,string fileNumber)
{
var urlInCurrDomain = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Documents", Path.GetFileNameWithoutExtension(url) +"-" + fileNumber + Path.GetExtension(url));
if (File.Exists(urlInCurrDomain))
{
urlInCurrDomain = TomerUtils.AddSuffix(urlInCurrDomain, 1);
}
File.Copy(url, urlInCurrDomain);
return Path.GetFileName(urlInCurrDomain);
}
public void Delete(string fileName)
{
var path = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Documents", fileName);
if (File.Exists(path))
File.Delete(path);
}
我的java脚本代码:
function copyFileToDomain(url) {
$.ajax({
type: "Get",
url: "/Tomer/api/Mismachimapi?url=" + url + "&fileNumber=" + fileCounter,
xhrFields: { withCredentials: true },
crossDomain: true,
success: function (fileName) {
showFileWindow(fileName);
},
error: function (xhr, status, error) {
showError(xhr, error, "err")
}
});
} 打开窗口:
function showFileWindow(fileName) {
var wnd = window.open("Documents/" + fileName, "_blank", "x=y");
wnd.onbeforeunload = function () {
deleteFile(fileName);
};
}
删除文件:
function deleteFile(fileName) {
$.ajax({
type: "Delete",
url: "/Tomer/api/Mismachimapi?fileName=" + fileName,
xhrFields: { withCredentials: true },
crossDomain: true,
error: function (xhr, status, error) {
showError(xhr, error, "err")
}
});
}