相关疑难解决方法(0)

在HTML5 localStorage中存储对象

我想在HTML5中存储JavaScript对象localStorage,但我的对象显然正在转换为字符串.

我可以使用存储和检索原始JavaScript类型和数组localStorage,但对象似乎不起作用.他们应该吗?

这是我的代码:

var testObject = { 'one': 1, 'two': 2, 'three': 3 };
console.log('typeof testObject: ' + typeof testObject);
console.log('testObject properties:');
for (var prop in testObject) {
    console.log('  ' + prop + ': ' + testObject[prop]);
}

// Put the object into storage
localStorage.setItem('testObject', testObject);

// Retrieve the object from storage
var retrievedObject = localStorage.getItem('testObject');

console.log('typeof retrievedObject: ' + typeof retrievedObject);
console.log('Value of retrievedObject: ' + retrievedObject);
Run Code Online (Sandbox Code Playgroud)

控制台输出是

typeof testObject: object
testObject properties:
  one: 1 …
Run Code Online (Sandbox Code Playgroud)

javascript html5 local-storage

2386
推荐指数
14
解决办法
101万
查看次数

Safari的html5 localStorage错误:"QUOTA_EXCEEDED_ERR:DOM例外22:尝试向超出配额的存储添加内容."

我的webapp在ios safari私密浏览中有javascript错误:

JavaScript的:错误

未定义

QUOTA_EXCEEDED_ERR:DOM例外22:尝试向存储添加内容......

我的代码:

localStorage.setItem('test',1)
Run Code Online (Sandbox Code Playgroud)

javascript html5 web-applications local-storage

132
推荐指数
5
解决办法
14万
查看次数

在页面加载之间保留变量

我正在尝试捕获我的表单的提交按钮按下,如果表单已提交,页面刷新,我会显示一些隐藏的字段.我想捕获表单是否已经提交之前,如果它是在重新加载时提交的,我想取消隐藏隐藏的字段.我试图使用全局变量来实现这一点,但是我无法使其正常工作.

这是我尝试过的:

  var clicked = false;

  $(document).ready(function() {

    $("input[type='submit'][value='Search']").attr("onclick", "form.act.value='detailSearch'; clicked = true;  return true;");

    if (clicked == true) {
      // show hidden fields
    } else {
      // don't show hidden fields
    }
  });
Run Code Online (Sandbox Code Playgroud)

有关此代码有什么问题的任何建议吗?

javascript jquery form-submit persistent-storage

80
推荐指数
2
解决办法
6万
查看次数

window.name作为数据传输:一种有效的方法?

概述和原始问题

window.name是一个有趣的野兽.MDN的描述暗示了原始意图:

窗口名称主要用于设置超链接和表单的目标.Windows不需要名称.

所以,这意味着我们可以在这个窗口中打开控制台,并写道:

var win = window.open('http://google.com', 'el goog');
Run Code Online (Sandbox Code Playgroud)

...然后让它通过弹出窗口拦截器,它应该在一个名为"el goog"的窗口中打开google.com.由于同源策略,我无法访问name属性win,但如果我在新窗口中打开一个控制台并输入name,我就会得到"el goog".

如果我将窗口发送回我打开它的域(在这种情况下是stackoverflow.com),我可以获取name属性,但它没有改变.

win.location.replace(location.href);
win.name; // "el goog"
Run Code Online (Sandbox Code Playgroud)

这意味着我们可以通过设置name窗口的属性来拥有一种跨域会话存储.

如果google.com 在窗口被发送回原始域之前更改了值window.name,我们会看到新值而不是"el goog".这可以用作跨域数据传输,类似于JSONP或CORS的实用程序.

我做了一些搜索试图找到更多的信息,显然道场认为它是合法的运输.但不知何故,这并不能完全让我放心.所以我的问题是,任何信誉良好的网站都window.name用作数据传输吗?我认为它很容易被发现,因为他们的文档会对JSONP的查询字符串说" 添加回调",或者为window.name添加'what',但我从未见过这样的东西.有没有人在野外发现过这个?


替代问题

可能是没有人真正使用这种技术; 如果那是真的那么(正如Rob W指出的那样)上面的问题是无法回答的.所以,我的另一个问题是,这种方法有什么问题?这可能有助于解释为什么它没有被真正采用.

我认为,与JSONP相比,这种方法至少有两个好处.

  • 使用JSONP,您可以信任来自外地的脚本在您的域上运行.使用window.name,恶意站点包含的任何脚本都可以在自己的域上运行.

  • 使用JSONP,无法传递大数据(对于URL来说太大了),也无法进行HTTP POST.有了window.name,我们可以发布任意大小的任意数据.

有什么缺点?


示例实现

这是客户端实现的一个非常简单的示例.这不处理POST请求,只处理GET.

function fetchData(url, callback) {
    var frame = document.createElement('iframe');
    frame.onload = function() {
        frame.onload = function() { …
Run Code Online (Sandbox Code Playgroud)

javascript same-origin-policy

45
推荐指数
1
解决办法
1万
查看次数

刷新按钮后,文本在 jquery 中发生变化

当我单击一个按钮时,文本每次都会改变。例如,当我转到页面时,它显示“关闭”。如果我单击该按钮,它的值将更改为“打开”。它也以另一种方式发生。如果我单击“打开”,则它会更改为关闭。

然而,问题是如果按钮处于“打开”状态,并且如果我刷新它会更改为“关闭”。但是,如果它处于“关闭”状态并且我单击刷新,则它不会更改为“打开”。

我需要的是每次点击后它应该从打开变为关闭或关闭到打开。但刷新后也应该处于相同的状态。它不应该改变。我该怎么做。

function changeStatus() {
  console.log("Hi");
  
  var val = document.getElementById("openClose").value;
  $.ajax({
    type: 'POST',
    url: '/change/me',
    data: {
      'val': val
    },
    success: function(result) {
      alert("The text has been changed");

    }
  })
}

$(".changeme").click(function() {
  $(this).text(function(i, text) {
    return text === 'Close' ? 'Open' : 'Close'
  })
})
Run Code Online (Sandbox Code Playgroud)
<!--Stylesheets-->
<link href="https://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet">
<link href="http://getbootstrap.com/2.3.2/assets/css/bootstrap.css" rel="stylesheet" />


<!--JS files-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>

<button class="btn btn-danger changeme" onclick="changeStatus()" id="openClose">Close</button>
</div>
Run Code Online (Sandbox Code Playgroud)

javascript jquery

5
推荐指数
1
解决办法
607
查看次数

重新加载页面而不重新加载控制台数据

我想在谷歌Chrome控制台中运行一些javascript.在它需要执行之间的某个地方

location.reload();
Run Code Online (Sandbox Code Playgroud)

这样页面就会刷新,但是整个控制台数据(我在colsole中定义的函数)会被破坏.所以我的问题如下:有没有办法刷新网页而不重新加载控制台窗口?

javascript console google-chrome refresh

3
推荐指数
1
解决办法
7727
查看次数

如何在页面刷新时保留无线电输入状态

如果用户提交有错误的表单(如果页面会刷新),我有一个表格,我需要存储所有单选按钮的状态.

我想要实现与此非常相似的东西:

$(function(){
        $('.example input[type="radio"]:checked').each(function(){
        $(this).attr("checked",true);
    });
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

javascript jquery

3
推荐指数
1
解决办法
4904
查看次数