feng 发布的文章

c# web配置允许跨域方法

浏览器因为安全原因,默认不允许js代码跨域请求.如果要跨域只能用jsonp.
还可以通过配置web.config文件添加自定义头部来实现允许跨域请求.

如下,在system.webServer标签下添加:

<system.webServer>
<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE" />
  </customHeaders>
</httpProtocol>
</system.webServer>

关于taptap上的calculator通关秘籍

公司最近流行玩一个计算器的小游戏
请输入图片描述

玩了几关感觉很有趣,于是就入坑了.
接着就发现,玩到40多关就继续不下去了.....

看着别人都玩到很后面追不上了,于是狠狠心,拿手边的excel作弊....
花了两天,总算是一边加功能(新的按钮)一边玩游戏,总算玩出了.分享一下工具:
(注意,excel由于安全要求,需要开启宏才能运行脚本程序,不会开启宏的同学自行百度)
比方说最后一关:
请输入图片描述

在excel里按计算机显示的内容填入:
请输入图片描述

然后点cal按钮
然后等待几秒钟....(有些变态关卡会等很久,主要是我的代码没做剪枝优化^_^)

在F1单元格中就会出现答案:7 7 3=>5 shift> inv10 7

按照顺序输入答案.然后就...赢了...^_^
请输入图片描述

傻瓜式操作,都很简单,不过之前的关卡我都是一边玩一边加功能,一边打补丁的.可能会有bug存在(算不出或者程序报错等)
如果发现了欢迎联系作者的邮箱(主页联系作者自己看)

程序代码就不贴了,想看的自己下载,
程序下载路径:http://demo.fengyitong.name/tool/calculator.xlsm

iis Compilation Error 解决方案

今天在虚拟机上发布.net网站
报错为
Compiler Error Message: CS0016: Could not write to output file 'c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root...'

网上找了好多解决方案没有用,最终发现:
"C:\Windows\temp"文件夹加上 IIS_IUSRS的权限就好了。
汗= =

图片瀑布流制作.

由于在网上找的相关图片瀑布流的代码,封装性都不太高,并且都不支持自适应的效果(js在初始化的时候就确定了宽度,不支持放大缩小改变宽度)
于是想着自己封装一个图片瀑布流的代码.
暂时的做法是宽度都统一,高度自适应.
等以后有时间的话,再想一下宽度是多列的思路.

源码链接:图片瀑布流

基本的思路是每个图片以绝对定位的方式一个一个的放到页面上.有一个数组记录每列的当前高度.
做完之后看一下效果不错,主页面监听页面是否滚动到了底部去加载新的图片.
但是偶尔却会出现.图片重叠的现象,非常奇怪.
一开始认为是程序可能没有读取到图片的高度.写代码监听一下图片高度

 var imageHeight = dom.find('img').height();
 if (imageHeight < 50) debugger;

却发现从来都没跳到断点中来.判断应该不是没有读取到图片的高度.

后来偶然间发现一个问题:虽然封装的对象中的方法:addImageList是一个一个加载图片的,不存在没有记录图片的高度,然后在对象外部页面是监听滚动条的方式去加载图片的,也就是说同一时间可能会调用多次加载图片的方法.

这个情况下就会出现一张图片已经确定好位置,但是需要在图片加载结束后读取高度,记录这个图片占用的空间之前,另外一个图片也加载在同一个位置的情况.

找到出问题的原因,剩下的就很好办了.外部不再直接调用addImageList方法.而是以堆栈的方式,将需要放置的图片放在一个对列中.

//添加图片到对列中.(推入对列中统一处理)
p.pushImages = function (opt_arr, callback) {
    var self = this;
    if (!(opt_arr instanceof Array)) {
        opt_arr = [opt_arr];
    }
    for (var i = 0; i < opt_arr.length; i++) {
        var obj = {
            data: opt_arr[i],
            callback: callback
        };
        self.plusImageList.push(obj);
    }
};

然后在创建对象的时候,启动方法_detailImage检测是否有需要处理的图片,这样就不会在同一时间多次调用增加图片的方法,外部只是往对象内部添加数组,真正的添加图片在对象内部处理.

//处理对列中的图片
p._detailImage = function () {
    var self = this;
    if (self.plusImageList.length == 0) {   //如果对列中没有图片,延迟100毫秒再来读取对列.
        window.setTimeout(function () {
            self._detailImage();
        }, 100);
    } else {
        var temp = self.plusImageList.splice(0, 1)[0];     //取出一个图片对象.
        self.addImage(temp.data, function () {
            if (typeof temp.callback === 'function') temp.callback();
            //继续对下一个对列中的图片进行处理.(如果让图片一张一张出来的效果可以这里加一个延迟)
            window.setTimeout(function () { self._detailImage(); }, 100);  
           // self._detailImage();
        });
    }
};

这里记录一下走过的坑,以免下次再踩进去了,最终我想要做一个自定义表情包的页面,代码整理好后,再放上链接

QQ浏览器支持api调试

QQ浏览器有chrome的优点,又可以不翻墙直接装插件
一直很喜欢用,但是他调试webapi返回的json数据的时候并不友好(是直接下载的,问题是我们下载下来看很麻烦),因为他返回json数据的时候仍然用的是ie内核

于是百度搜索ie解决json显示问题:

http://blog.csdn.net/dream_ll/article/details/45151001#

通过修改注册表实现:


Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json]

"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"

"Encoding"=dword:00080000

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\text/json]

"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"

"encoding"=dword:00080000


保存为.reg后缀名,双击执行,再打开QQ浏览器,就没问题了