2

我在我的项目中使用 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:“未定义”不是对象(评估“Sys.WebForms.PageRequestManager”)

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

这就是无法加载 jQuery 的原因。任何人都知道为什么会发生这种情况?在 Chrome 中它看起来不错。

4

2 回答 2

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" />

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

于 2013-04-28T18:45:19.647 回答
2

此问题是由于 ASP 无法识别用户代理并使用“Crazy 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'
}
});
于 2013-06-20T04:31:38.360 回答