【发布时间】:2021-10-06 11:02:25
【问题描述】:
我正在以控制器方法在我的脚本上动态生成一个 javascript 文件,并将这个动态生成的脚本添加到我的 html 中,就像您使用常规 javascript 一样。
在我的 php 代码中我返回
return $this->response
->setBody($data)
->setHeader('text/javascript')
->noCache()
->getBody();
$data 是一个变量,用于保存生成的 javascript 文件中的数据。
到目前为止一切正常,直到我想使用 codeigniter 内置的 previous_url() 函数然后我被带到这个 javascript 文件文件而不是以前的网页。
到目前为止,我已经尝试破解 CI 核心并且它有效。我所做的是 return false 在 Codeigniter.php 的 storePreviousURL() 方法中,如果 Cache-control 响应标头包含 no-cache 或 no-store 值,我使用生成器中的内置 CI $response->no_cache() 方法设置脚本。
我想知道是否有更好的方法来解决这个问题,我个人也建议不要破解内核,但我似乎没有选择。
【问题讨论】:
-
为什么不在视图中的
<script>标记之间直接使用echo $data而不是生成文件? -
我可以这样做,但是该文件是在控制器中生成的,并且取决于我不想带入视图的许多其他组件,我试图让我的代码看起来像可能。
-
与
echo $data -
问题不在于回显字符串结果,如何防止 php 将 url 存储到 $_SERVER['HTTP_REFERER'] 中生成的脚本标签中,而无需破解 codeigniter 核心,因为它在脚本标签中不应被视为已访问链接,我可以回显结果但我不想。
-
恕我直言,有时核心 hack 是值得的 - 这是 PHP / CI 的伟大之处 - 如果某些东西不起作用,我们可以访问它。我的建议 - 记录你所做的更改,这样如果你更新到新版本的 CI,你就会知道你需要重新编码什么。
标签: javascript php codeigniter http-headers codeigniter-4