Javascript可以操纵浏览器显示的文档,因此以下内容:
<script>
document.write("<table><tr><td>Hola</td><td>Adios</td></tr></table>");
</script>
Run Code Online (Sandbox Code Playgroud)
将使浏览器显示一个表,就像它是原始HTML文档一样:
<table>
<tr>
<td>Hola</td>
<td>Adios</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
有没有办法保存/提供此文档内容?
目前我们使用Ext-js生成一些很好的报告,我想做的是拥有它的"text/html"版本(我的意思是,不需要javascript的东西)
因此,在页面的最后,我将添加一个按钮:"另存为blaba",文档应显示文本/纯文本版本.
我现在能想到的唯一方法是将内容写入javascript变量,如:
var content = document.toString(); // or something magic like that.
// post it to the server
Run Code Online (Sandbox Code Playgroud)
然后将该值发布到服务器,并让服务器显示该值.
<%=request.getParameter("content-text")%>
Run Code Online (Sandbox Code Playgroud)
但看起来很棘手.
还有其他选择吗?
编辑
好的,我几乎得到了它.现在我只需要弹出新窗口,这样选项"你想保存它吗"
这是我到目前为止所得到的
<script>
document.write("<div id='content'><table><tr><td>Hola</td><td>Adios</td></tr></table></div>");
function saveAs(){
var sMarkup = document.getElementById('content').innerHTML;
var oNewDoc = document.open('application/vnd.ms-excel');
oNewDoc.write( sMarkup + "<hr>" );
oNewDoc.close();
}
</script>
<input type="button" value="Save as" onClick="saveAs()"/>
Run Code Online (Sandbox Code Playgroud)
这条线:
var oNewDoc = document.open('application/vnd.ms-excel');
Run Code Online (Sandbox Code Playgroud)
应指定新的内容类型,但它将被忽略.
我已经通过谷歌和搜索引擎优化搜索了这个问题的可能答案,但只能找到分散在该地方的一小部分信息,其中大多数似乎是个人意见.
我知道这个问题可以被认为是主观的,但我不是在寻找个人意见,而是寻找具有理由的事实(例如过去的经验),甚至是寻找描述最佳实践的博客/维基的单一链接(这是我更喜欢诚实的东西).我不想要的是如何使这项工作,我知道如何创建自我更新的桌面应用程序.
我想知道创建自我更新桌面应用程序的最佳实践.我特别好奇的那种最佳实践是:
当然有一些关于这个东西的书面规则/建议?关于许多应用程序最烦人的事情之一是更新,因为很难在"过时"和"在用户面前"之间找到良好的平衡.
如果有人认为这是用单个客户端编写的.net C#,在与更新服务器具有持续可用连接的机器上运行,所有这些机器都通过应用程序相互通信,并且所有这些机器都与中央数据库服务器通信.
我正在尝试在JUnit测试中使用使用Apache CXF的HTTP基本身份验证的远程Web服务.
我得到的错误是:
javax.xml.ws.WebServiceException: Failed to access the WSDL at: http://localhost:8080/services/MyService?wsdl. It failed with:
Server returned HTTP response code: 401 for URL: http://localhost:8080/services/MyService?wsdl.
at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.tryWithMex(RuntimeWSDLParser.java:151)
at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:133)
at com.sun.xml.internal.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:254)
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:217)
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:165)
at com.sun.xml.internal.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:93)
at javax.xml.ws.Service.<init>(Service.java:76)
at com.wave2.marketplace.importer.impl.adportal.ws.MyServiceService.<init>(MyServiceService.java:37)
at com.wave2.marketplace.importer.impl.adportal.MyWSTest.testConsumingTheWS(MyWSTest.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) …Run Code Online (Sandbox Code Playgroud) 我需要以编程方式在客户端存储数据,而不必在每次页面加载时从服务器传输数据.我考虑生成一个动态JavaScript文件,其中包含用户当前会话所需的数据,并确保它被缓存,但这看起来非常混乱,我可以想到这样一种方法有一些缺点.
如何在客户端存储持久数据?
您如何避免在服务器和客户端重复验证?是否有一个Web编程平台可以从另一个生成一个,所以我不必保持两个同步?
考虑这种情况:
您希望以JSON格式向客户端发送一些数据,并且您不想返回服务器.数据由15名教师和100名学生组成.这些实体之间的关系是多对多的(每个学生都学习很多老师,每个老师都教许多学生).
在客户端,向用户显示学生列表.点击任何学生后,他/她的老师名单将被呈现给用户,点击老师后,将显示该老师的所有学生的名单.这导致从学生到教师和副verca的无限点击式导航.
现在,如您所知,JSON仅表示此形式中的一对多关系:
{ "s1" : [ "t1", "t2"], "s2" : [ "t2", "t4" ], "s3" : [ "t1", "t3", "t4"], ...}
Run Code Online (Sandbox Code Playgroud)
你对如何做到这一点有任何想法吗?
我一直无法在Heroku上托管的Node.js应用程序上为我的JS客户端代码加载socket.io库.
现在,我在index.html文件的末尾有这一行:
<script type="text/javascript" src="/socket.io/socket.io.js"></script>
Run Code Online (Sandbox Code Playgroud)
但是,当我socket = io.connect('http://myherokuapp');在我的JS客户端代码中执行时,我得到了预期的"io未定义"错误.
知道如何在Heroku上正确加载库吗?
谢谢!
目的是;
如果禁用复选框,则不执行任何操作
如果启用并选中了复选框,请设置按钮的样式.
这是我到目前为止所得到的;
$(document).ready(function (e) {
$(".checkbox").live("click", function () {
if ($(this).hasAttribute('disabled')) {
return false;
}
var isAnyChecked;
$("input[type=checkbox]").each(function () {
var checkedValue = $(this).attr("checked");
if (checkedValue == "checked") {
isAnyChecked = true;
}
});
if (isAnyChecked) {
$("#<%= btnConfirm.ClientID %>").css("display", "block");
} else {
$("#<%= btnConfirm.ClientID %>").css("display", "none");
}
}); });
Run Code Online (Sandbox Code Playgroud)
我试过.is(':disabled'),.hasAttr(),.prop()和.attr().任何帮助将不胜感激.
在浏览器的javascript变量中保留用户密码是否会暴露任何特定的安全漏洞,超出基于浏览器的客户端的常见安全漏洞?
考虑这个片段作为一个简单的例子 - jsfiddle在这里
<label for="password">Password</label>
<input type="password" id="password"/><br/><br/>
<button type="button" id="pwdButton">Store password in window.password</button>
<script>
function getContentsOfPasswordField() {
return jQuery("input#password").val();
}
jQuery("button#pwdButton").on("click", function() {
window.password = getContentsOfPasswordField();
alert("'" + password + "' stored in global var window.password")
});
</script>
Run Code Online (Sandbox Code Playgroud)
在此示例中,密码变量是全局的,并且在页面的生命周期内持续存在,只是为了使其尽可能地打开攻击并提供最坏情况.也许限制变量的范围/生命周期可以保护它免受某些类型的攻击?
立即想到的攻击是XSS,但是如果客户端首先容易受到XSS的攻击,那么攻击者无论如何都可以通过密钥记录来读取密码(请参阅此内容),因此将其保存在变量中不会正如我所看到的,增加了对XSS攻击的漏洞.
请注意问题的关键不在于这样做是否是一种不好的做法,这更多是关于客户端Web应用程序安全性的基本问题.
在这篇stackoverflow文章中,我读到了有关过滤主干集合和使用子集的内容.
一个答案(通过雪橇)建议使用backbone.subset.js(用法示例).
我在backbone.subset.js上找不到任何进一步的资源,但我没有将它实现到我的项目中.
似乎backbone.subset.js是我想要实现的完美解决方案.
(拥有一个"父"集合,始终包含所有模型,并根据用户输入将相关模型从父集合过滤到backbone.subset集合.)
我的"父母"系列,包含所有任务:
var TasksAll = Backbone.Collection.extend({
url: '/tasks', // the REST url to retrieve collection data
model: Task // the models of which the collection consists of
});
var allTasks = new TasksAll();
Run Code Online (Sandbox Code Playgroud)
现在我想为task.status = 0的任务创建一个子集集合:
var TasksTrash = new Backbone.Subset({
superset: allTasks,
filter: function(Task) {
return Task.isTrash();
}
});
var trashTasks = new TasksTrash();
Run Code Online (Sandbox Code Playgroud)
在Task模型中,方法"isTrash"在以下情况下返回true:
this.get('status') == 0
Run Code Online (Sandbox Code Playgroud)
a)backbone.subset.js上还有更多资源吗?
b)如何实施上述方案?
c)我可以将"超集"和"过滤器"选项作为参数传递给Backbone.Subset初始化函数吗?
d)我查看了backbone.subset.js代码,当我'重置'我的父集合时,我的子集集应该立即更新,对吧?
PS:我对Backbone很新.谢谢你的帮助.
client-side ×10
javascript ×5
server-side ×2
auto-update ×1
checkbox ×1
cxf ×1
document ×1
heroku ×1
java ×1
json ×1
many-to-many ×1
node.js ×1
passwords ×1
persistence ×1
security ×1
socket.io ×1
storage ×1
web-services ×1
xss ×1