是否有可能在整个会话期间在控制台中创建一个持久的对象?

时间:2013-12-20 18:29:03

标签: javascript google-chrome session object console

目标:制作一个独立的模块化JavaScript调试实用程序(包括自定义dom和事件操作方法),以便在任何感兴趣的随机站点(无后端访问权限)的控制台(最好是Chrome)中使用。

用法:最初直接通过复制粘贴到控制台包含模块脚本,或者创建一个指向script的新myhomepage.com/shortandeasytoremember.js元素,并从那里调用命名空间上的方法。

问题:如何在整个会话期间最好地使其持久化(这样我每次刷新后都不需要重新包含它)?

注意:不需要任何额外的浏览器兼容性 - 只要它在最新的Chrome中运行,我就可以了(但是兼容性部门的任何努力总是非常受到其他人的欢迎)。 如果你在未来的时间里阅读,到那时存在比下面所写的更好的解决方案,请花点时间用你的优秀知识做出贡献。

我目前拥有的是window.unload上的一个事件监听器,用于将任何状态数据保存到localStorage和一个字符串,以便在使用eval(localStorage.getItem('loadMyNS'));重新加载页面后更容易重新包装模块。< / p>

(function(ns, undefined){

    'use strict';

    //util methods on ns and few monkey patches for debugging ...

    var store = 'if(!window.MyNS){' +
        'var xyz9=document.createElement("script");' +
        'xyz9.src="http://myhomepage.com/shortandeasytoremember.js";' +
        'document.head.appendChild(xyz9);}';
    localStorage.setItem('loadMyNS', store);

    ns.save = function () {
        // and use localStorage for some more data 
        // to be used by other methods after page reload
    };

    window.addEventListener('unload', ns.save, false);

}(window.MyNS = window.MyNS || {}));

(没有localStorageaddEventListener的浏览器可能会受益于this article

我也使用与window.name而不是localStorageas long as this still seems legid)相同的架构,因为编写eval(window.name)会减少输入^^。

我使用“eval-script-tag-inclusion”的麻烦(其中一个)位于阻止外部非https脚本源的网站上。一个理想的解决方案是一个全局可访问的模块,它将使用包含的状态和方法(并且在刷新后不需要初始化),至少直到我关闭窗口(或覆盖ref的c)。

如果目前绝对不可能,那么仍然优于我当前代码的较小解决方案就足够了。

0 个答案:

没有答案