PhantomJS中的链接断开

时间:2013-04-28 18:45:20

标签: asp.net phantomjs

我将PhantomJS用于我的项目。 似乎服务器生成的链接是错误的。他们看起来很奇怪。 我从Process.StandardError的输出中得到了这个:

  

ReferenceError:找不到变量:$

     

http://localhost/MyWebsite/AppName/(F(nwmx6eY2n1ZH2wmw2Wsta6X7s6OIeQ8LLQxbeJ5uULf99WBNZ12KatxFMKam4Vr9r1fUrkDLc8t5XvaR9EcW67kkaZB32ftWPOH-GvvuUaIKJZMtBcMYjIY3---ewwTEsXVZl6MfNOZQIwRBahBG-xtBrzvW2tdh4TM9CSU8c467zudg0))/Page.aspx:424   ReferenceError:找不到变量:$

     

http://localhost/MyWebsite/AppName/(F(nwmx6eY2n1ZH2wmw2Wsta6X7s6OIeQ8LLQxbeJ5uULf99WBNZ12KatxFMKam4Vr9r1fUrkDLc8t5XvaR9EcW67kkaZB32ftWPOH-GvvuUaIKJZMtBcMYjIY3---ewwTEsXVZl6MfNOZQIwRBahBG-xtBrzvW2tdh4TM9CSU8c467zudg0))/Page.aspx:804   TypeError:'undefined'不是对象(评估   'Sys.WebForms.PageRequestManager')

     

http://localhost/MyWebsite/AppName/(F(nwmx6eY2n1ZH2wmw2Wsta6X7s6OIeQ8LLQxbeJ5uULf99WBNZ12KatxFMKam4Vr9r1fUrkDLc8t5XvaR9EcW67kkaZB32ftWPOH-GvvuUaIKJZMtBcMYjIY3---ewwTEsXVZl6MfNOZQIwRBahBG-xtBrzvW2tdh4TM9CSU8c467zudg0))/Page.aspx:890

这就是无法加载jQuery的原因。 任何人都知道为什么会这样?在Chrome中它看起来很好。

2 个答案:

答案 0 :(得分:2)

好的,似乎ASP.Net识别浏览器和浏览器定义设置的方式存在问题。为了使phantom.js工作,我使用以下代码在App_Browsers文件夹中添加了phantomjs.browser文件:

<browsers>
  <!-- Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.0 Safari/534.34 -->
  <browser id="PhantomJS" parentID="Safari">
    <identification>
      <userAgent match="PhantomJS/(?'version'(?'major'\d+)(\.(?'minor'\d+)?)\w*)" />
    </identification>

    <capabilities>
      <capability name="browser"                         value="PhantomJS" />
      <capability name="majorversion"                    value="${major}" />
      <capability name="minorversion"                    value="${minor}" />
      <capability name="type"                            value="PhantomJS${major}" />
      <capability name="version"                         value="${version}" />
      <capability name="ecmascriptversion"               value="3.0" />
      <capability name="javascript"                      value="true" />
      <capability name="javascriptversion"               value="1.7" />
      <capability name="w3cdomversion"                   value="1.0" />
      <capability name="supportsAccesskeyAttribute"      value="true" />
      <capability name="tagwriter"                       value="System.Web.UI.HtmlTextWriter" />
      <capability name="cookies"                         value="true" />
      <capability name="frames"                          value="true" />
      <capability name="javaapplets"                     value="true" />
      <capability name="supportsCallback"                value="true" />
      <capability name="supportsDivNoWrap"               value="false" />
      <capability name="supportsFileUpload"              value="true" />
      <capability name="supportsMaintainScrollPositionOnPostback" value="true" />
      <capability name="supportsMultilineTextBoxDisplay" value="true" />
      <capability name="supportsXmlHttp"                 value="true" />
      <capability name="tables"                          value="true" />
    </capabilities>
  </browser>
</browsers>

它告诉服务器使用带有Phantom.JS的cookie作为浏览器:

<capability name="cookies" value="true" />

这样就可以正确生成链接。

答案 1 :(得分:2)

此问题是由于ASP无法识别用户代理并使用“Craazy String!”而不是饼干。

如果您无法编辑或不想编辑App_Browsers,只需将phantomjs中的用户代理设置为已知可用的浏览器中的精确字符串。

示例:

var page = new WebPage();
page.settings.userAgent = 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.36 Safari/537.36'

或者,在casperjs中:

var casper = require('casper').create({
pageSettings: {
    userAgent: 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.36 Safari/537.36'
}
});