2019-09-12 08:30:11 2376次浏览 4条回答 0 悬赏 10 金钱

标题描述的可能不太清楚。
或者 Yii2 解决这个问题不是这个思路。
具体的需求是这样的——
其他站点需要引用 Yii 开发的这个站点的一个页面,这个页面需要输出标准的 js。
在浏览器上访问该页面后,输入代码实例如下——

document.write('<a href="https://test.com/test.php">test string</a>');

其他站点采用下面的方式引用——

<script type="text/javascript" src="https://test.com/counter.php"></script>

最佳答案

  • 发布于 2019-09-12 16:32 举报

    更 yii 一点的做法是,仿照 yii\web\HtmlResponseFormatteryii\web\JsonResponseFormatteryii\web\XmlResponseFormatter,自己写一个 JavascriptResponseFormatter 类(这个类唯一的作用 也就是设置 Content-Type),然后就可以这样

    Yii::$app->response->format = Response::FORMAT_JAVASCRIPT; 
    Yii::$app->response->data = "document.write('<a href=\"https://test.com/test.php\">test string</a>');";
    return Yii::$app->response->send();
    

    当然 FORMAT_JAVASCRIPT 这个常量的定义 还需要修改 Response 类,并且加上 到自己写的那个类的映射

    1 条回复
    回复于 2019-09-12 16:35 回复

    我先试试。谢谢!

  • 回答于 2019-09-12 16:19 举报

    简单点的话 直接 echo 就行
    讲究点的话,可以这样:

    // 没有这行的话,下面的设置 content-type 不好使,因为 默认的 format 是 text/html,send 的时候会用默认的 format 把 content-type 覆盖掉
    Yii::$app->response->format = Response::FORMAT_RAW; 
    Yii::$app->response->headers->set('Content-Type', 'application/javascript');
    Yii::$app->response->data = "document.write('<a href=\"https://test.com/test.php\">test string</a>');";
    return Yii::$app->response->send();
    
  • 回答于 2019-09-18 09:27 举报

    学习了!!

  • 回答于 2019-09-18 18:07 举报

    还可以添加个伪静态,把网址后缀改成.js

您需要登录后才可以回答。登录 | 立即注册
肥宝宝天使
主管

肥宝宝天使 北京

注册时间:2019-09-10
最后登录:2020-01-17
在线时长:5小时49分
  • 粉丝0
  • 金钱420
  • 威望10
  • 积分570

热门问题